それは奇妙になりますけれども、この質問を見たが、私は本当に私はコーディングの私の旅を続けている間、いくつかの中核となる概念を理解する必要があります。私はそれのようになりHackerrank上にある問題を持っている:割り切れるSUMのペアを
私はとにかくここで問題文を与えます。
問題文
私たちは与えられた数の割り切れるペアの数を見つけるために持っている配列、与えられたkは、とあることへの1つの以上の条件、があります:ARR [i]の<ARR [j]は、これらのペアからは。
例
例えば、ar=[1,2,3,4,5,6]
とk=5
。基準を満たす当社の3組がある[1,4] [2,3]
と[4,6]
。
コード
私は私のコードを公開する前に、私は私のコードは、すべてのテストケースに合格したことをお伝えしたいと思い、それが次の課題に先に移動するために受け入れられているが、私はある、を把握しようとしているグリッチがありますそこコードインチ
static int divisibleSumPairs(int n, int k, int[] ar) {
int count = 0;
for(int i=0; i<ar.length; i++){
for(int j=i+1; j<ar.length; j++){
if(((ar[i]+ar[j])%k)==0){
if(i < j)
count++;
}
}
}
return count;
}
私はこれを行う際に、ここではif(i < j) count++
、それは私に正しい結果が得られますが、私はこれを行うとすぐにif(ar[i] < a[j]) count++
、それはおそらく私に間違った答えを与えています。
缶誰の助けに私が残っているもののように、このアウトをクリアします。私が知っているので、チェックは、arr[i] < arr[j]
正しい結果を与える必要があります。私は間違った知識を続行する必要はありません。
EDITS
私は私が間違って何をしていたか理解していますので。そして、私はされて自分のコード内の1つの編集持た1で内部ループを開始しない、それが実行される再たびに1と内側のループ終了を始める、となるため、。私はこれをクリアすると、このような質問を対処するのに十分な私の概念が強い作りを手伝ってくれたみんなに感謝します。
私は個人的に感謝マイクのPomax時"Kamermans、リコラ、およびxerx593を私の疑問をクリアして、私の要素をループの中核となる概念を与えるため。これは、将来的に私を助けるだろう、と私は再びそのことを繰り返すことはしません。:)
私はちょうどあなたのリンクをチェックし、問題文で与えられた条件であります
I <JおよびAr [I] + AR [j]がKで割り切れる(i、j)の対の数を検索し、印刷します。
これは単にの数である非順序対合計がKで割り切れるされた要素。
しかし、あなたが書きました
:あることへの1つの以上の条件があり、ARR [i]の<ARR [j]は、これらのペアからは。
あなたが質問を読み違えているように私には思えます。なぜ、それは説明するi<j
のに対し、条件が動作arr[i] < arr[j]
しません。
今、あなたはあなただけ、反復する必要順不同ペアを必要としないことを知っているj
から1
にしますar.length
。あなたが必要とするのでj > i
、すべてのj
間1
及びi
(包括的)が無用です。あなたはにあなたのコードを簡素化することができます。
static int divisibleSumPairs(int n, int k, int[] ar) {
int count = 0;
for(int i=0; i<ar.length-1; i++){
for(int j=i+1; j<ar.length; j++){
if(((ar[i]+ar[j])%k)==0){
count++;
}
}
}
return count;
}