이 이상한 것입니다하지만이 질문을 볼 수 있지만 난 정말 코딩의 나의 여행을 계속하는 동안 몇 가지 핵심 개념을 이해할 필요가 있습니다. 나는 같이 간다 Hackerrank에 문제가 : 나눌 SUM 쌍을
나는 어쨌든 문제는 여기에 문을 줄 것이다 :
문제 설명
우리는 주어진 번호로 나눌 쌍의 수 찾아야 배열 주어 K를 하고, 그것에 하나 개 이상의 조건이있다 : 도착 [I] <도착 [J] 그 쌍에서이.
예
예를 들어, ar=[1,2,3,4,5,6]
와 k=5
. 기준을 충족 세명의 쌍입니다 [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]
정확한 결과를 제공해야합니다. 나는 잘못된 지식을 계속 실행하지 않으.
편집
나는 내가 잘못을하고 있었는지 이해하기 때문에. 그리고 나는 내 코드에서 하나의 편집이 1 내부 루프를 시작하지 가 실행 다시 때마다 1 내부 루프 완료를 시작하고, 때문에. 나는 이것을 지우고 내 개념이 같은 질문을 다루는 충분히 강한을 나에게 도움이 모든 사람들에게 감사를 전합니다.
나는 개인적으로 감사 마이크 'POMAX'Kamermans , 리콜라 및 xerx593을 내 의심을 삭제하고, 나에게 요소를 통해 반복의 핵심 개념을 제공합니다. 그것은 미래에 나에게 도움이 될 것입니다, 나는 다시 일을 반복하지 않을 것이다. :)
난 그냥 당신의 연결 및 질문 문에 주어진 조건입니다 확인
찾아 I <J 및 AR [I] + AR [j]가 K로 나누어 (I, J) 쌍의 수를 출력한다.
수있는 간단하다 순서화 쌍 합 K로 나누어하는 소자는.
그러나 당신이 쓴
: 그것은 하나 개 이상의 상태가 도착 [I] <도착 [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;
}