Leetcode 215. Kth Largest Element in an Array

mac2024-11-10  41

题目链接:215. Kth Largest Element in an Array

题目大意:给定无序数组求第k大,经典面试题

题目思路:利用快速排序,每次定一个轴,比轴大的放左边,小的放右边,如果左边的数量小于k,则第k大在右边,反之在左边,每次去找就好了

时间复杂度&&空间复杂度:O(n)(需要找的总共次数为n/2+n/4+…+1 = 2n-1次)&&O(1)

class Solution { public: int findKthLargest(vector<int>& nums, int k) { int left = 0,right = nums.size(); while(true){ int pos = partition(nums, left, right); if(pos == k-1) return nums[pos]; if(pos > k-1) right = pos; else left = pos+1; } } int partition(vector<int>& nums,int left,int right){ int pivot = left,l = left,r = right; while(l < r){ while(++l < right&&nums[l] >= nums[pivot]); while(--r > left&&nums[r] <= nums[pivot]); if(l < r) swap(nums[l],nums[r]); } swap(nums[pivot],nums[r]); return r; } };
最新回复(0)