나머지 요소가 두 번 나타나는 동안 배열에 한 번만 나타나는 숫자를 반환해야하는 경우 문제가 발생합니다. 이진 검색을 사용하여 할 수있는 일을했지만 첫 번째 테스트 케이스에 갇혀있었습니다. 내가 같은 것을 기록 할 수있을 때 그것이 왜 정의되지 않고 반환되는지 이해하지 못합니다. 무슨 일이 일어나는지 이해하도록 도와주세요.자바 스크립트에서 유효한 return 문을 사용하더라도 재귀 함수가 undefined를 반환합니다.
function singleNonDuplicate(nums) {
if(nums.length == 1) {
console.log(nums[0]);
return nums[0];
}
if((nums[Math.floor(nums.length/2)] !== nums[Math.floor(nums.length/2) - 1]) && (nums[Math.floor(nums.length/2)] !== nums[Math.floor(nums.length/2) + 1])) {
return nums[Math.floor(nums.length/2)];
}
if(Math.floor(nums.length/2) % 2 == 0) {
if(nums[Math.floor(nums.length/2)] == nums[Math.floor(nums.length/2) - 1]) {
singleNonDuplicate(nums.slice(0, Math.floor(nums.length/2) - 1));
console.log('g');
} else {
singleNonDuplicate(nums.slice(Math.floor(nums.length/2) + 2));
console.log('g');
}
} else {
if(nums[Math.floor(nums.length/2)] == nums[Math.floor(nums.length/2) - 1]) {
console.log(nums.slice(Math.floor(nums.length/2) + 1));
singleNonDuplicate(nums.slice(Math.floor(nums.length/2) + 1));
} else {
console.log('g');
singleNonDuplicate(nums.slice(0, Math.floor(nums.length/2)));
}
}
}
console.log(singleNonDuplicate([1,1,2]));
당신은 모든 재귀 지점에서 반환하지 않습니다. 'return singleNonDuplicate (....)' – epascarello
재귀 호출 즉, singleNonDuplicate (nums.slice (Math.floor (nums.length/2) + 2))로 리턴을 시도하십시오. return singleNonDuplicate (nums.slice (Math.floor (nums.length/2) + 2))가됩니다. – FujiRoyale