正如標題所說,是否有任何有效的方法來找到數組中使用遞歸的第二大元素?使用遞歸在數組中尋找第二大元素
回答
partition based Selection algorithm本質上是遞歸的,它可以讓你選擇k
「個數組中的元素,因此使用它 - 實際上你可以找到任何k
答案,包括k = n-1
(你的情況)。
這在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
@沒有額外的信息我的意思是 - 即如果你知道數組排序,你可以在'O(1)'中完成。 –
東西在O(n)
這樣的:
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個節點的二叉樹。然後將有n-1比較找到最大和log(n)-1比較第二大。但有些人認爲它需要n + log(n)比較。
- 1. 使用遞歸尋找數組中所有元素的組合
- 2. 使用遞歸在數組中尋找第k個最小的元素?
- 3. 使用PHP中的遞歸在數組中尋找最大值
- 4. 使用遞歸在數組中尋找最大值
- 5. 使用遞歸在數組中尋找最大值java
- 6. 遞歸算法來尋找數組中的最小元素
- 7. 在數組中尋找6的遞歸
- 8. 遍歷一個數組以尋找線性時間中第二大元素
- 9. 在遞歸算法中使用數組來尋找組合
- 10. 找到第二個和第三個最大元素數組java
- 11. 如何查找對象數組中的第二大元素
- 12. 使用遞歸在列表中找到第二小的數字
- 13. 使用遞歸獲取數組中最大的元素
- 14. 在嵌套列表中查找相同的第二個元素 - 遞歸函數
- 15. 使用二進制遞歸求和數組的元素
- 16. 在二維Python數組中尋找元素
- 17. 如何使用遞歸將元素從數組一中複製到數組二?
- 18. 遞歸地查找數組的最大元素
- 19. 使用遞歸查找數組元素 - JavaScript的
- 20. 找到整數數組中的整數元素:遞歸問題
- 21. Java - 使用條件和Lambda在數組中尋找元素
- 22. 在大小爲N的數組的每k個元素中查找最小元素和第二小元素
- 23. 在swift中查找二維數組中的最大元素
- 24. 使用遞歸尋找數組的最小值?
- 25. Clojure - 使用遞歸來查找列表中的元素數量
- 26. 用遞歸函數尋找最小值
- 27. 如何在數組數組中尋找最佳匹配元素?
- 28. 使用遞歸尋找幾何和
- 29. 使用遞歸尋找最小值
- 30. 遞歸求和一個二維數組的元素?
向我們顯示您的代碼,並告訴您它是否有效 –
您是否必須使用遞歸?沒有,很容易做到。 – Henry
效率和遞歸是兩個不同的方向。 –