题解 | #第k轻的牛牛#

第k轻的牛牛

https://www.nowcoder.com/practice/7676478b46794456b145e8e48b0e2763

一、知识点

数组 快排

二、解题思路

利用快排思想,第k小数前面都比它小,后面都比它大。

根据pos和k的相对位置,每次只继续处理一边的顺序。

时间复杂度O(n),空间复杂度O(1)。

三、C++解法

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param weights int整型vector 
     * @param k int整型 
     * @return int整型
     */
    int findKthSmallest(vector<int>& weights, int k) {
        int len = weights.size();
        int ret = quickSort(weights, 0, len - 1, k -1);
        return ret;
    }

    int quickSort(vector<int>& weights, int left, int right, int k) {
        int pos = findPos(weights, left, right);
        if (pos == k) {
            return weights[pos];
        } else if (pos < k) {
            return quickSort(weights, pos + 1, right, k);
        } else {
            return quickSort(weights, left, pos - 1, k);
        }
    }

    int findPos(vector<int>& weights, int left, int right) {
        int first = weights[left];
        while (left < right) {
            while (left < right && weights[right] >= first) {
                right --;
            }
            swap(weights[left], weights[right]);
            while (left < right && weights[left] <= first) {
                left ++;
            }
            swap(weights[left], weights[right]);
        }
        return left;
    }
};
#在找工作求抱抱#
高频算法Top202-题解 文章被收录于专栏

手把手带你刷题

全部评论

相关推荐

04-03 22:41
兰州大学 C++
老六f:有时候是HR发错了,我之前投的百度的后端开发,他给我发的算法工程师,但是确实面的就是百度开发
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务