我可以搜索與下面的代碼之和k中的子陣列:如何找到具有O(n)時間複雜度的和k的所有子陣列?
public static void subarraySum(int[] arr, int sum) {
int start=0;
int currSum=arr[0];
for(int i = 1;i<=arr.length;i++) {
while(currSum>sum) {
currSum-=arr[start];
start++;
}
if(currSum==sum) {
System.out.println(start + " " + (i-1) + " index");
start=i;
currSum=0;
}
if(i<arr.length) {
currSum +=arr[i];
}
}
這將爲陣列工作像{15,2,4,8,9,5,10,23}。這個輸出將是2個子陣列{2,4,9,8}和{23}。
但是,對於像{1,5,2,5,1,3}這樣的數組,這隻會給我輸出爲1個子數組,但是有2個子數組和7是{5,2}和{2 ,5}。 關於如何在第二個數組中給出正確答案的上述代碼的任何建議?
你是指運行2個循環? – brij
@brij不是真的,它應該在一個循環中完成,你需要的唯一循環就是迭代並在第一個點上提到 –
,當sum等於我的目標時,我應該重新分配給i和j什麼值? – brij