蓝桥杯---快速排序(leetcode第159题)最小的k个元素(剑指offer原题)

文章目录

1.题目概述

这个题目只是被包装了一下,本质上依然是使用的我们的快速排序算法,为什么这样说呢?因为仔细阅读题目你就会发现,这个需要我们去找到最小的前K个元素,并且进行返回值处理;

对于上面用到的几个实例,实际上cnt=1的时候,就是从这个给定的数组里面选择最小的前一个元素,也就是最小的元素;cnt=2的时候,也就是从我们的这个数组里面选择最小的两个元素;

上面的这些问题其实都不难理解,但是第一步我们需要做的就是去对于这个给定的数组进行排序,然后根据这个排序之后的结果进行选择我们的最小的K个元素

2.思路分析

其实这个整体的思路和之前的压根就没有区别,主要就是我们的这个进行数组分三块之后,是从左边开始找的,之前的(也就是昨天的那个文章)里面的题目是从右边开始找的,因为之前的那个是topk问题,也就是最大的k个元素,但是我们的这个里面是最小的,所以是从左边开始找的,但是这个整体的思路没变,还是去分别计算每一块里面的数据个数,和我们的k进行比较去,最后确定这个返回值;

3.代码详解

  • 首先,要看懂主要的那个函数里面写的代码,就是首先进行排序,排序之后,得到的这个数组是一个有顺序的,因此这个时候就是直接取出来这个排序之后的数组里面的前面的k个元素即可;

  • 然后就是常规的操作,选择基准元素,数组分三块,分类讨论,只不过这个里面的分类讨论我们是从左边开始的,因为这个题目要求的找到最小的k个元素;

  • 稍微解释一下,为什么这个a+b>=k的时候,我们没有进行任何的操作,就是因为这个时候我们的第二块里面的所有的元素数值都是一样的,都是key,因此这个里面我们不需要对于这个数组进行任何的操作;

相关推荐
圣保罗的大教堂23 分钟前
leetcode 541. 反转字符串 II 简单
leetcode
WLKQ31 分钟前
力扣——完全平方数
算法·leetcode·职场和发展
xxxmmc42 分钟前
Leetcode 141 Linked List Cycle and Leetcode 142 Linked List Cycle II
算法·leetcode·快慢指针
wheeldown1 小时前
【蓝桥杯】每天一题,理解逻辑(1/90)【Leetcode 移动零】
c语言·leetcode·职场和发展·蓝桥杯
深图智能1 小时前
算法仿真平台搭建1-FFMPEG+RtspSever快速搭建一个RTSP服务器
c++·算法·ffmpeg·视频编解码
圣保罗的大教堂1 小时前
leetcode 1472. 设计浏览器历史记录 中等
leetcode
没明白白2 小时前
归并排序:分而治之的排序之道
数据结构·算法·排序算法
鸡鸭扣2 小时前
数据结构与算法:动态规划dp:买卖股票相关力扣题(下):309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费
数据结构·python·算法·leetcode·动态规划·力扣·dp
liruiqiang052 小时前
线性模型 - 支持向量机
人工智能·算法·机器学习·支持向量机
梅茜Mercy2 小时前
数据结构:二叉树的数组结构以及堆的实现详解
数据结构·算法