Iは、以下のコードで和kのサブアレイを検索することができ:これは、{} 15,2,4,8,9,5,10,23ような配列のために働く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];
}
}
。これに対する出力は、2つのサブアレイ{2,4,9,8}と{23}になります。
しかし、{1,5,2,5,1,3}のような配列の場合、これは1つのサブアレイとして出力されますが、{5,2}と{2の合計7を持つ2つのサブアレイがあります、5}。 2番目の配列に正しい答えを与えるために上記のコードをtweekする方法に関する提案はありますか?
2つのループを実行していますか? – brij
@brij実際には、それは1つのループで実行する必要があります。必要な唯一のループは、sumと目標に等しい場合の最初の点で述べたテストを繰り返して行います。 –
、iとjにどの値を割り当てる必要がありますか? ? – brij