정말 흥미로운 프로그래밍 문제를 해결하기 위해 노력하고 있으며 필자는 코드가 실패한 이유를 설명하지 않습니다. 여기있다 :바이너리 검색이 실패한 경우 찾기
쓰기리스트와 목표 합 주어진 합 대상 합 임의의 두 가지 요소 제로 인덱스를 반환하는 함수. 이러한 요소가 없으면 함수는 을 반환해야합니다. 예를 들어 는 findTwoSum는 (새로운 INT은 [{1, 3, 5, 7, 9}, 12)의 인덱스는 다음 튜플 하나를 반환해야
1, 4 (3 + 9 = 12) 2, 3 (5 + 7 = 12) 3, 2 (7 + 5 = 12) 4, 1 (9 + 3 = 12)
간단한 오른쪽되어야 하는가? 그래서 여기 내 함수는 다음과 같습니다
public static int[] findTwoSum(int[] list, int sum) {
int[] indices = null;
for(int i = 0; i < list.length; i++) {
int currentNum = list[i];
int findNum = sum - currentNum;
int length = list.length;
int min = i;
int max = length-1;
while(max >= min) {
int guess = (max+min)/2;
if(list[guess] == findNum) {
return new int[] {i,guess};
}
if(list[guess] < findNum) {
min = guess + 1;
}
if(list[guess] > findNum) {
max = guess - 1;
}
}
}
return indices;
}
코드는 매우 간단하다 배열의 모든 요소에 대해, 그들의 합이 제공 sum
같도록, 이진 검색, 다른 요소를 사용하여 찾습니다. 이 코드를 테스트했는데 제공된 배열이 정렬되었다고 가정하면 실패하는 시나리오를 찾을 수 없습니다. 그러나,이 코드를 TestDome에서 실행할 때, 마지막 케이스가 실패합니다. 어떻게 든 잘못된 해결책입니다. 아무도이 접근 방식에있어 잘못된 점을 지적 할 수 있습니까?
문제는 코드가 처리하지 않는 것 목록의 두 _distinct_ 요소 요청을 정확히. – Gassa
@ 가사 그래, 나는 그것에 대한 수표도 받았고, 실제로 도움이되지 않았다. 지금 내가 생각하고있는 것은 배열이 마지막 경우에 정렬되지 않는다는 것입니다. – Zed
주어진 목록이 이미 정렬 된 형식입니까? –