제목에서 말했듯이 재귀를 사용하여 배열에서 두 번째로 큰 원소를 찾는 효율적인 방법이 있습니까?재귀를 사용하여 배열에서 두 번째로 큰 원소 찾기
답변
partition based Selection algorithm 자연에 의해 재귀 적이며, 그래서를 사용하면, 배열의 요소 번째 '는 k
를 선택할 수 있습니다 - 당신은 실제로 k = n-1
(귀하의 경우)를 포함한 모든 k
에 대한 답을 찾을 수 있습니다.
이것은 평균적으로 상당히 낮은 상수로 O(n)
에서 수행됩니다. 이런 O(n)
에
배열에 대해 알려진 것이 없으면 재귀 적이거나 반복적이든간에 O(n)
이상을 수행 할 수 없습니다.
두 개의 가장 큰 요소를 전달하고 더 큰 값을 찾으면 대체하면서 재귀 적으로 통과합니다.
find_largest(array_begin, largest, secondLargest)
if (array_begin = NULL)
return secondLargest
if (array_begin.value > largest)
secondLargest = largest
largest = array_begin.value
return find_largest(array_begin+1, largest, secondLargest)
largest
및 secondLargest
는 처음에 당신이 배열에서 찾을 것으로 예상되는 최소로 설정 될 수있다.
당신이 옳아 요, 정렬 (적어도 전체 정렬)은 잔인합니다.
어레이에 대해 알려진 것이 없다면 어떻게 최소값을 설정할 수 있습니까? 첫 번째 원소를 의미합니까? – Neel
@Neel 추가 정보가 없다는 뜻입니다. 즉, 배열이 정렬되어있는 경우,'O (1)'에서 배열을 찾을 수 있습니다. –
예시 :
int findSecondLargest(int[] arr, int index, int largest, int secondLargest) {
if(index == arr.length) {
return secondLargest;
}
int element = arr[index];
if(element > secondLargest) {
if(element > largest) {
return findSecondLargest(arr, index + 1, element, largest);
} else {
return findSecondLargest(arr, index + 1, largest, element);
}
}
return findSecondLargest(arr, index + 1, largest, secondLargest);
}
public void recurs(int[] data, int ind, int max1, int max2){
if(ind<data.length){
if(data[ind]>max1){
int temp = max1;
max1 = data[ind];
max2 = temp;
} else if(data[ind]>max2){
max2 = data[ind];
}
recurs(data, ind+1, max1, max2);
} else {
return max2;
}
return -1;
}
그것을 호출 : 은 (DATAX, 0는 Integer.MIN_VALUE,는 Integer.MIN_VALUE)를 되풀이;
본능적으로 배열을 스캔하고 모든 값을 두 번 비교할 수 있습니다. 어쨌든 문제를 해결하려면 O (n)가 필요합니다. 충분히 빠릅니다.
무료가 아니기 때문에 필요하지 않은 경우 재귀 적으로 발생하지 않도록하십시오.
재귀로 수행하는 경우 최대 3 (n)/2-2 비교를 수행해야하지만 더 나은 솔루션을 얻으려면 n 개의 노드가있는 이진 트리로 생각하십시오. 그런 다음 두 번째로 큰 log (n) -1 비교를 찾는 n-1 비교가 있습니다. 그러나 일부에서는 n + log (n) 비교가 필요하다고 주장합니다.
- 1. Ruby의 배열에서 두 번째로 큰 번호 찾기
- 2. C 배열에서 두 번째로 큰 숫자 찾기
- 3. 재귀를 사용하여 배열에서 값 찾기
- 4. 열에서 두 번째로 큰 항목 찾기
- 5. 두 배열에서 다음으로 큰 정수 찾기
- 6. 유니온 B에서 k 번째로 작은 원소 찾기
- 7. MATLAB : 행당 n 번째로 작은 원소 찾기
- 8. 행렬에서 가장 큰 원소 찾기
- 9. 재귀를 사용하여 합계 찾기
- 10. 배열에서 두 번째로 큰 짝수 int를 찾는 효율적인 방법
- 11. 개체 배열에서 두 번째로 큰 요소를 찾는 방법
- 12. 재귀를 사용하여 최소값 찾기
- 13. 배열에서 두 번째로 높은 변수를 찾으십시오.
- 14. 두 번째로 큰 번호를 찾으십니까?
- 15. 재귀를 사용하여 배열에서 가장 큰 요소 가져 오기
- 16. 선형 시간에서 두 번째로 큰 요소를 찾기 위해 배열 탐색
- 17. 배열 수식 두 번째로 큰 숫자를 찾으려면
- 18. 배열에서 임의의 원소 선택하기
- 19. 사전 편집에서 두 번째로 큰 요소 얻기
- 20. 배열에서 두 번째로 높은 값을 얻는 방법, 세 번째로 큰 값
- 21. 재귀를 사용하여 모음 수 찾기
- 22. 매트릭스의 원소 색인 찾기
- 23. PHP 다차원 배열에서 재귀를 사용하여 html로
- 24. java- 재귀를 사용하여 서브 세트 합계 찾기
- 25. sql : 두 번째로 큰 요소를 선택하려고하지만 가장 큰 요소를 선택합니다.
- 26. Java에서 재귀를 사용하여 배열에서 제거하는 방법
- 27. 두 배열에 재귀를 사용하여 일반적인 숫자가있는 경우 찾기
- 28. 쿼리 결과에서 두 번째로 큰 수를 얻어야합니다.
- 29. 매트릭스의 최대 원소 찾기
- 30. n + 2k-3 비교에서 크기 (2^k +1)의 배열에서 세 번째로 큰 요소 찾기
코드를 표시하면 효율적인지 알려드립니다. –
재귀를 사용해야합니까? 그것은없이 쉽게 할 수 있습니다. – Henry
효율성과 재귀는 두 가지 방향입니다. –