leetcode面试题 17.14. 最小K个数

本文探讨了LeetCode中的一个问题——找出数组中最小的k个数。提出了两种解决方案:一是利用快速排序的思路找到最小k个元素;二是通过先排序再提取前k个元素的方法。详细解析了每种方法的实现过程。

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

 题目链接:https://leetcode-cn.com/problems/smallest-k-lcci/

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

方法一: 利用快排思想,找到最小的前k个元素

class Solution {
private:
    vector<int> quick_sort(vector<int>& arr, int k,int l,int r)//数组,k值,左侧坐标,右侧坐标
    {
        int i = l,j = r;//左右侧
        while(i<j)
        {
            while(i<j&&arr[j]>=arr[l]) j--;//假如arr[j]大于被作为左侧基准的数,j就从右往左走
            while(i<j&&arr[i]<=arr[l]) i++;//假如arr[i]小于被作为左侧基准的数,i就从左往右走
            swap(arr[i],arr[j]);//更换对应的i,j将小于arr[l]的元素归位到左侧,大于的放到右侧
        }
        swap(arr[i],arr[l]);//更换最后一个arr[i]和arr[l],这个操作保证了原先的arr[l]变成了arr[i],这就保证了arr[l]左侧的元素都比他小,右侧的都比他大
        if(i>k) return quick_so
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值