LintCode 第k大的元素

2021-08-14 23:04:53 字數 1305 閱讀 7111

問題:給定乙個陣列,求第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個數中有...