C++ 中統計所有元素都大於 K 的子陣列


給定一個整數陣列 arr[] 和一個數字 K。目標是統計 arr[] 的所有子陣列,使得子陣列的所有元素都大於 K 或 K 小於子陣列的所有元素。如果陣列為 [1,2,3] 且 K 為 1。子陣列將為 [2]、[3]、[2,3]。

讓我們透過示例來理解。

輸入 − arr[] = { 2, 2, 1, 1, 1, 5 }; K=1

輸出 − 所有元素都大於 K 的子陣列的數量為 − 4

解釋 − 子陣列將為:[2]、[2]、[5]、[2,2]。每個子陣列中的所有元素都大於 1。

輸入 − arr[] = { 3,4,5,6 }; K=2

輸出 − 所有元素都大於 K 的子陣列的數量為 − 10

解釋 − 子陣列將為 − [3]、[4]、[5]、[6]、[3,4]、[4,5]、[5,6]、[3,4,5]、[4,5,6]、[3,4,5,6]。總數=10。

下面程式中使用的方案如下

我們將使用 for 迴圈遍歷陣列。如果當前元素大於 K。則遞增計數。否則將計數設定為 0,並將總計設定為 count*(count+1)/2。(用於子陣列)。如果最後計數非零。則為剩餘子陣列的計數新增 count*(count+1)/2。

  • 獲取一個數字陣列 arr[]。

  • 函式 sub_greater_k(int arr[], int size, int k) 獲取陣列並返回所有元素都大於 k 的子陣列的數量。

  • 將初始計數設定為 0。

  • 我們將使用 for 迴圈從 i=0 到 i<size 遍歷陣列。

  • 如果 arr[i]>k 則遞增計數。

  • 具有計數(元素 > k)的子陣列將為 count*(count+1)/2。將此新增到所有此類子陣列的總計中。

  • 最後再次將 count*(count+1)/2 新增到總計中,如果計數非零。

  • 將總計作為結果返回。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int sub_greater_k(int arr[], int size, int k){
   int count = 0;
   int total = 0;
   for (int i = 0; i < size; i++){
      if (arr[i] > k){
         count++;
      }
      else{
         total += (count) * (count + 1) / 2;
         count = 0;
      }
   }
   if(count){
      total += (count) * (count + 1) / 2;
   }
   return total;
}
int main(){
   int arr[] = {2, 4, 6, 1, 3, 7, 9 };
   int size = sizeof(arr) / sizeof(arr[0]);
   int k = 7;
   cout<<"Count of subarrays with all elements greater than K are: "<<sub_greater_k(arr, size, k);
   return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Count of subarrays with all elements greater than K are: 1

更新於: 2020-12-01

383 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告