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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告