問題:給定乙個陣列,求第k大的元素
分析:題目可以轉換成排序的問題,因為排序好的陣列查詢很方便。。
慣性思維的解法(超出時間):
從左到右遍歷得到最小的元素放在左邊
class solution
public int commonsort(int nums) }}
return nums;
}}
氣泡排序解法(
超出時間):
class solution
/*** 氣泡排序(從小到大):
* 兩兩比較,大的放右邊。
* 如[3, 5, 4, 2, 6]進行氣泡排序:
* 1. 3和5比較,不交換
* 2. 5和4比較,交換[3,4,5,2,6]
* 3. 5和2比較,交換[3,4,2,5,6]
* 4. 5和6比較,不交換
* --------------------
* 5. 3和4比較,不交換
* 6. 4和2比較,交換[3,2,4,5,6]
* 7. 4和5比較,不交換
* --------------------
* 8. 3和2比較,交換[2,3,4,5,6]
* 9. 3和4比較,不交換
* --------------------
* 10. 2和3比較,不交換
*/ public int bbsort(int nums) }}
return nums;
}}
快速排序的解法:
class solution
/*** 快速排序:
* 分而治之的比較排序演算法:
* 思想是選定乙個基準元素,將大於基準元素的數字放在基準元素右邊,小於基準元素的數字放在基準元素左邊,然後遞迴左邊和右邊的陣列
*/ public void quicksort(int arr,int _left,int _right)
// 此時left = right
arr[left] = temp; // 基準元素放在中間
quicksort(arr, _left, left - 1); // 基準元素左邊遞迴
quicksort(arr, right + 1, _right); // 基準元素右邊遞迴}}
}
耍無賴的解法,事實上arrays.sort()使用的演算法就是快排:
class solution
};
lintcode 第k大元素
在陣列中找到第 k 大的元素。樣例 1 輸入 n 1,nums 1,3,4,2 輸出 4 樣例 2 輸入 n 3,nums 9,3,2,4,8 輸出 4 要求時間複雜度為o n 空間複雜度為o 1 使用快速排序的思路,第k大的元素就是排序完成之後的第nums.size k位置上的元素。即qsort ...
LintCode 題目 第k大元素
在陣列中找到第 k 大的元素。樣例 1 輸入 n 1,nums 1,3,4,2 輸出 4 樣例 2 輸入 n 3,nums 9,3,2,4,8 輸出 4 直接使用sort函式對陣列元素進行排序,最後輸出所求的k大的元素。這裡使用的是stl容器中的vector,並不是平時定義的int nums,使用v...
輸出陣列第k大的元素
用快速排序的思想輸出陣列第k大的元素 1 include2 include3 using namespace std 45 遞迴實現 返回陣列第k大的值.陣列下標區間是 begin,end 其中陣列假定n個元素,則k的值在區間 1,n 6 能夠使用這種方法的前提條件是 n個數不能重複。如果n個數中有...