C++中大小為K且平均值大於或等於閾值的子陣列個數
假設我們有一個整數陣列arr和兩個整數k和閾值。我們必須找到大小為k且平均值大於或等於閾值的子陣列的數量。因此,如果輸入類似:[2,2,2,2,5,5,5,8],k = 3,閾值 = 4,則輸出將為3。因為子陣列[2,5,5]、[5,5,5]和[5,5,8]的平均值分別為4、5和6。
為了解決這個問題,我們將遵循以下步驟:
sum := 0,div := k,n := 陣列中元素的個數
設定sum := arr所有元素的和
ret := 0
對於i := 0和j在k到n – 1範圍內,將i和j都增加1
如果sum / div >= 閾值,則將res增加1
sum減去arr[i]
sum加上arr[j]
如果sum / div >= 閾值,則將ret增加1
返回ret。
示例(C++)
讓我們來看下面的實現,以便更好地理解:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int numOfSubarrays(vector<int>& arr, int k, int threshold) {
double sum = 0;
double div = k;
int n = arr.size();
for(int i = 0; i < k; i++){
sum += arr[i];
}
int ret = 0;
for(int i = 0, j = k; j < n; i ++, j++){
if(sum / div >= threshold ){
ret++;
}
sum -= arr[i];
sum += arr[j];
}
if(sum / div >= threshold ){
ret++;
}
return ret;
}
};
main(){
vector<int> v = {2,2,2,2,5,5,5,8};
Solution ob;
cout << (ob.numOfSubarrays(v, 3, 4));
}輸入
[2,2,2,2,5,5,5,8] 3 4
輸出
3
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP