使用C++編寫,找到和小於K的子數組的數量
在這篇文章中,我們將使用C 找出具有小於K的和的子陣列的數量。在這個問題中,我們有一個陣列arr[]和一個整數K。現在我們需要找出和小於K的子數組。以下是範例−
Input : arr[] = {1, 11, 2, 3, 15} K = 10 Output : 4 {1}, {2}, {3} and {2, 3}
尋找解決方案的方法
現在我們將使用兩種不同的方法來解決給定的問題-
暴力破解
在這個方法中,我們將迭代遍歷所有子數組併計算它們的總和,如果總和小於k,則與k 進行比較,以增加我們的答案。
範例
#include <bits/stdc++.h> using namespace std; int main(){ int arr[] = {1, 11, 2, 3, 15}; // given array int k = 10; // given k int size = sizeof(arr) / sizeof(int); // size of our array. int ans = 0; // counter variable. for(int i = 0; i < size; i++){ // outer loop. int sum = 0; for(int j = i; j < size; j++){ // inner loop. sum = sum + arr[j]; if(sum < k) // comparing with k. ans++; // incrementing our ans if sum is less than k. } } cout << ans << "\n"; return 0; }
輸出
4
但是,這種方法不是很好,因為它的時間複雜度非常高O(N*N),其中n 是陣列的大小。
我們'將使用滑動視窗方法尋找替代解決方案(這將幫助我們降低程式的時間複雜度)。
高效方法
與暴力破解不同
高效方法
strong>,我們不會遍歷所有子陣列。相反,只有當子數組的總和超過 k 時,我們才會進行遍歷,並將左邊界移動到右邊界,並不斷重複,直到遍歷整個數組。
範例
#include <bits/stdc++.h> using namespace std; int main(){ int arr[] = {1, 11, 2, 3, 15}; // given array int k = 10; // given k int size = sizeof(arr) / sizeof(int); // size of our array. int ans = 0; // counter variable. int start = 0; // left border. int end = 0; // right border. int sum = 0; while(end < size && start < size){ // till the whole array is traversed. while(sum >= k && start < end){ sum = sum - arr[start]; start++; } if(end >= start) ans = ans + end - start; sum += arr[end]; end++; } cout << ans << "\n"; return 0; }
輸出
4
我們使用滑動視窗技術來使我們的程式在處理更大的約束條件時更快或更高效。
上述程式碼的解釋
在這個方法中,我們通常遍歷直到我們的總和小於k,並根據它遞增我們的答案,這是程式碼中關鍵的變化發生在總和大於或等於k時。在這種情況下,我們開始遞增我們的左邊界,直到小於等於k或總和大於等於k。隨著我們的處理進一步進行,它遍歷了其他可能形成的子數組。這些新的子數組的總和小於k被加到我們的答案中,因此我們的答案遞增。
與先前的暴力解法相比,這種方法非常高效,因為它的時間複雜度為O(N),其中N是我們陣列的大小。
結論
在本文中,我們使用滑動視窗技術解決了一個問題,即找到和小於k的子數組的數量。我們也學習了這個問題的C 程序以及我們解決這個問題的完整方法(普通和高效)。我們可以使用其他語言(如C、Java、Python和其他語言)編寫相同的程式。希望您會發現本文有幫助。
以上是使用C++編寫,找到和小於K的子數組的數量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

我們都知道不是任何數字的平方的數字,如2、3、5、7、8等。非平方數有N個,不可能知道每個數字。因此,在本文中,我們將解釋有關無平方數或非平方數的所有內容,以及在C++中尋找第N個非平方數的方法。第N個非平方數如果一個數是整數的平方,則該數稱為完全平方數。完全平方數的一些例子是-1issquareof14issquareof29issquareof316issquareof425issquareof5如果一個數不是任何整數的平方,則該數稱為非平方數。例如,前15個非平方數是-2,3,5,6,

在本文中,我們將了解逆轉演算法,將給定的陣列向右旋轉k個元素,例如−Input:arr[]={4,6,2,6,43,7,3,7},k= 4Output:{43,7,3,7,4,6,2,6}Explanation:Rotatingeachelementofarrayby4-elementtotherightgives{43,7,3,7,4,6,2,6}.Input:arr[]={8 ,5,8,2,1,4,9,3},k=3Output:{4,9,3,8,5,8,2,1}尋找解的方

圓是封閉圖形。圓上的所有點到圓內一點的距離都相等。中心點稱為圓心。點到圓心的距離稱為半徑。面積是封閉圖形尺寸跨距的定量表示。圓的面積是圓的尺寸內所包圍的面積。計算圓面積的公式,Area=π*r*r為了計算面積,我們給出了圓的半徑作為輸入,我們將使用公式來計算面積,算法STEP1:Takeradiusasinputfromtheuserusingstdinput.STEP2:Calculatetheareaofcircleusing, area=(

我們有兩個整數數組,一個具有計算的元素,另一個具有分割數組以產生子集所需的分割點,我們必須計算每個分割中每個子集的總和並返回最大子集讓我們通過示例來理解:-輸入−intarr[]=intarr[]={9,4,5,6,7}intsplitPoints[]={0,2,3,1};輸出−每次分割後的最大子數組和[ 22,13,9,9]解釋−這裡我們根據數組的分割點來分解數組,並在每次分割後獲得最大子集和第一次分割後→{9}和{4,5,6,7 }>>最大子數組總和為-22第二次分割後→{9},{4

在本文中,我們將描述找出四元數的所有可能方法,其中前3項採用A.P.,後3項採用G.P.。首先,我們將解釋算術級數(A.P.)和幾何級數(G.P.)的基本定義。算術級數(A.P.)-它是一個數字序列,其中公差(d)相同或恆定,表示兩個連續數字的差是恆定的。例如:1,3,5,7,9|d=2幾何級數(G.P.)-這是一個數字序列,其中公共比率(r)相同,這意味著我們可以透過乘以前一個號碼與固定號碼。例如:3、6、12、24、....|r=2在這個問題中,我們需要確定N個整數的陣列arr[]中有多少個

在本文中,我們將使用C++解決尋找最大值和最小值相同的子數組數量的問題。以下是該問題的範例−Input:array={2,3,6,6,2,4,4,4}Output:12Explanation:{2},{3},{6},{6},{2 },{4},{4},{4},{6,6},{4,4},{4,4}and{4,4,4}arethesubarrayswhichcanbeformedwithmaximumandminimumelementsame.Input:array={3,3, 1,5,

在這個問題中,我們得到一個指向鍊錶頭部的指標和一個整數k。在大小為k的群組中,我們需要反轉鍊錶。例如-Input:1<->2<->3<->4<->5(doublylinkedlist),k=3Output:3<->2<->1<->5<->4尋找解決方案的方法在這個問題中,我們將制定一個遞歸演算法來解決這個問題。在這種方法中,我們將使用遞歸並使用遞歸來解決問題。範例#include<iostream&

我們需要適當的知識才能在C++的數組語法中創建幾個唯一的對。在尋找唯一對的數量時,我們計算給定數組中的所有唯一對,即可以形成所有可能的對,其中每個對應該是唯一的。例如-Input:array[]={5,5,9}Output:4Explanation:Thenumberofalluniquepairsare(5,5),(5,9),(9,5)and(9,9).Input:array[]= {5,4,3,2,2}Output:16尋找解法的方法有兩種方法可以解決這個問題,它們是−
