日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 215. 数组中的第K个最大元素(快速排序)

發(fā)布時(shí)間:2024/7/5 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 215. 数组中的第K个最大元素(快速排序) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 題目

在未排序的數(shù)組中找到第 k 個(gè)最大的元素。請(qǐng)注意,你需要找的是數(shù)組排序后的第 k 個(gè)最大的元素,而不是第 k 個(gè)不同的元素。

示例 1: 輸入: [3,2,1,5,6,4] 和 k = 2 輸出: 5示例 2: 輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4 輸出: 4說明: 你可以假設(shè) k 總是有效的,且 1 ≤ k ≤ 數(shù)組的長(zhǎng)度。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 快排解題

  • 參考:尋找數(shù)組內(nèi)第K大的元素
  • 類似題目:LeetCode 973. 最接近原點(diǎn)的 K 個(gè)點(diǎn)(排序/優(yōu)先隊(duì)列/快排)
class Solution { //C++ public:int findKthLargest(vector<int>& nums, int k) {k = nums.size()-k;//排序后的位置return findKthL(nums,k,0,nums.size()-1);} private:void selectMid(vector<int>& nums, int left, int right){int mid = left+((right-left)>>1);if(nums[mid] > nums[right])swap(nums[mid],nums[right]);if(nums[left] > nums[right])swap(nums[left], nums[right]);if(nums[mid] > nums[left])swap(nums[mid], nums[left]);}int findKthL(vector<int>& nums, int &k, int left, int right){selectMid(nums,left,right);//三數(shù)取中int p = nums[left];int i = left, j = right;while(i < j){while(i < j && nums[j] > p)j--;swap(nums[i], nums[j]);while(i < j && nums[i] <= p)i++;swap(nums[i], nums[j]);}if(i == k)return nums[i];else if(i < k)return findKthL(nums,k,i+1,right);elsereturn findKthL(nums,k,left,i-1);} };

class Solution { //C++ ,簡(jiǎn)化版 public:int findKthLargest(vector<int>& nums, int k) {return findk(nums,0,nums.size()-1, nums.size()-k);}int findk(vector<int>& nums, int l, int r, int k){int p = nums[l];int i = l, j = r;while(i < j){while(i < j && nums[j] > p)j--;while(i < j && nums[i] <= p)i++;swap(nums[i],nums[j]);}swap(nums[i], nums[l]);if(i == k)return nums[i];if(i < k)return findk(nums, i+1, r, k);elsereturn findk(nums, l, i-1, k);} };

56 ms 9.9 MB

python3 解答

class Solution:# py3def findKthLargest(self, nums: List[int], k: int) -> int:def findk(l, r, k):p = nums[l];i = lj = rwhile i < j:while i < j and nums[j] > p:j -= 1while i < j and nums[i] <= p:i += 1t = nums[i]nums[i] = nums[j]nums[j] = tt = nums[i]nums[i] = nums[l]nums[l] = tif i == k:return nums[i]elif i < k:return findk(i+1, r, k)else:return findk(l, i-1, k)return findk(0,len(nums)-1, len(nums)-k)

1032 ms 19.7 MB

總結(jié)

以上是生活随笔為你收集整理的LeetCode 215. 数组中的第K个最大元素(快速排序)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。