【LeetCode 215】Kth Largest Element in an Array

    xiaoxiao2022-07-07  197

    题目描述:

    求数组中第k大的数。

    思路:

    快排思想。使用kuai分治每次将数组划分为两段,并且返回划分点的位置,如果这个位置恰好是我们要的第k大的数,那么返回这个数即可。 如果返回的位置小于要找的位置,则向右边的一半数组继续寻找。 如果返回的位置大于要找的位置,则向左边寻找。

    代码:

    class Solution { public: int partition(vector<int>& nums, int l, int r) { int val = nums[r]; for (int i=l; i<r; ++i) { if (nums[i] < val) { swap(nums[l++], nums[i]); } } swap(nums[l], nums[r]); return l; } int findKthLargest(vector<int>& nums, int k) { int len = nums.size(); int l = 0, r = len-1, pos = len - k; int ans; while((ans = partition(nums, l, r)) != pos) { ans < pos ? l = ans + 1 : r = ans - 1; } return nums[pos]; } };

    这道题放那三天了,我终于写了。 看论文看的脑壳痛,好不容易看完abstract和introduction,发现好像,还是啥也没看懂。 刷题刷题,不要懒啊。

    最新回复(0)