difficulty:中等
在未排序的陣列中找到第k個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
示例 1:
輸入: [3,2,1,5,6,4] 和 k = 2
輸出: 5
示例 2:
輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4
輸出: 4
說明:
你可以假設 k 總是有效的,且 1 ≤ k ≤ 陣列的長度。
solution 1
bool cmp(int a,int b)
class solution
};
思路簡單粗暴,從大到小排序後直接選擇第k大的數就可以,時間複雜度o(nlgn),基本上時間花在排序上。solution 2
class solution
private:
inline int randompartition(vector& a, int l, int r)
int topk(vector& nums, int left, int right, int k)
else if (pos > k)
else
} int partition(vector& nums, int left, int right)
}swap(nums[right], nums[++tail]);
return tail;
}};
思路快排的分割槽操作,如果每次規模為 n 的問題我們都劃分成 1 和 n - 1,每次遞迴的時候又向 n - 1的集合中遞迴,這種情況是最壞的,時間代價是 o(n2)。所以引入隨機化來加速這個過程,它的時間代價的期望在概率上看來是 o(n)。
陣列中的第k小數
描述 以盡量高效率求出亂序中的k小數 輸入 第一行 陣列長度 第二行 陣列元素 空格隔開 第三性 第幾小的數 輸出 第k小的數 樣例輸入 5 6 1 2 9 3 8 2樣例輸出 解題思路利用快速排序找到主元的位置,判斷主元是第幾小的 主元位置大了剪掉右邊的 主元位置小了剪掉左邊的 假設要找第三小的數...
陣列中的第K大元素
第k大元素o n 解法,利用快排 剪枝,直接看 吧 include int k 7 第k大,k 0 int sort int array,int low,int high array low key return low void quicksort int array,int low,int hi...
陣列中第K小的數字
題目描述 給定兩個整型陣列a和b。我們將a和b中的元素兩兩相加可以得到陣列c。譬如a為 1,2 b為 3,4 那麼由a和b中的元素兩兩相加得到的陣列c為 4,5,5,6 現在給你陣列a和b,求由a和b兩兩相加得到的陣列c中,第k小的數字。輸入 輸入可能包含多個測試案例。對於每個測試案例,輸入的第一行...