C++中严格递增子数组的计数


给定一个包含整数元素的数组,任务首先是从给定数组中计算子数组,然后检查子数组中的元素是否按递增顺序排列。如果是,则考虑该子数组;否则,将被丢弃。

此方法是如果第0位和第1位的元素不是递增顺序,则停止进一步检查子数组。

例如 - 在 C++ 中

输入:int a[] = {1, 7, 5}

输出:严格递增子数组的数量为 1

解释 -可能的子数组包括 {1,7,5}, {1,7}, {7,5},其中 {1,7} 是唯一一个严格递增顺序的数组。

输入: int a[] = {1, 2, 7, 10}

输出:严格递增子数组的数量为 6

解释 -可能的子数组包括 {{1, 2}, {1, 2, 7}, {1, 2, 7, 10},{2, 7}, {2, 7, 10} 和 {7, 10},并且所有这些都是严格递增顺序的。

下面程序中使用的方法如下

  • 声明一个数组,输入元素,然后将数据连同数组长度一起传递给名为 countIncSubarrays(a,a.length) 的函数以进行进一步处理。
  • 在函数内部初始化一个计数标志。
  • 从 0 开始循环到数组长度
  • 在循环内部,从 i+1 开始另一个循环到数组长度
  • 在循环内部,检查 a[j] 是否大于 a[j-1] 并递增计数。
  • 否则中断循环,因为递增顺序检查失败。
  • 在主函数中,从函数调用中捕获结果并将其打印为输出。

示例

import java.util.*;
class testqwe {
   static int MAX = 4;
   static int a[] = new int[MAX];
   static Scanner scan = new Scanner(System.in);
   static int countIncSubarrays(int a[], int n) {

      int count = 0;
      for (int i = 0; i < n; i++) {
         for (int j = i + 1; j < n; j++) {
            if (a[j] > a[j - 1])
               count++;
            else
               break;
         }
      }
      return count;
   }

   public static void main(String[] args) {
      for (int i = 0; i < a.length; i++) {
         a[i] = scan.nextInt(); //1,2,7,0
      }
      int result = countIncSubarrays(a, a.length);
      System.out.println("Count of strictly increasing subarrays is " +
         result);
   }
}

如果运行以上代码,将生成以下输出:

输出

Count of strictly increasing subarrays is 6

更新于:2021年1月29日

386 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.