面试题 17.14. 最小K个数【分治法】

578 篇文章 ¥299.90 ¥399.90
570 篇文章 ¥299.90 ¥399.90
设计并实现一个算法,该算法针对给定数组arr和整数k,能有效地找出并返回数组中最小的k个元素。例如,对于arr = [1,3,5,7,2,4,6,8]和k = 4,算法将返回[1,2,3,4]。问题规模限制为0 <= len(arr) <= 100000,0 <= k <= min(100000, len(arr))。" 131228849,16947914,CSS3弹性盒子模型详解,"['CSS3', '前端开发', 'HTML']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。

示例:

输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
提示:

0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))

class Solution {
public:
    void quick_find(vector<int>& arr,int l,int r, int k)
    {
        if(l>=r) return;
        int ll = l, rr = r, t = arr[l];
        while(ll<rr)
        {
            while(ll<rr&&arr[rr]>=t) rr--;
            swap(arr[ll],arr[rr]);
            while(ll<rr&&arr[ll]<=t) ll++;
            swap(arr[ll],arr[rr]);
        }
        if(ll>=k){
            quick_find(arr, l, ll, k);
        }
        else{
            quick_find(arr, ll+1, r, k);
        }
    }
    vector<int> smallestK(vector<int>&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值