一、题目地址
https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/
二、具体代码
/**
* @param {number[]} arr
* @param {number} k
* @return {number[]}
*/
// 时间复杂度:O(N)
// 时间复杂度:O(logN)
var getLeastNumbers = function(arr, k) {
if(k >= arr.length) {
return arr;
}
return quickSort(arr, k, 0, arr.length - 1);
};
function swap(arr, l, r) {
let temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
function quickSort(arr, k, l, r) {
let i = l;
let j = r;
while(i < j) {
// 需要先判断j--,在判断i++,因为有特例:[ 0, 1, 2, 1 ]
while(i < j && arr[j] >= arr[l]) {
j--;
}
while(i < j && arr[i] <= arr[l]) {
i++;
}
swap(arr, i, j);
}
swap(arr, i, l);
if(i > k) {
return quickSort(arr, k, l, i - 1);
}
if(i < k) {
return quickSort(arr, k, i + 1, r);
}
console.log(arr);
return arr.slice(0, k);
}
let result = getLeastNumbers([0,1,2,1], 1);
console.log(result);
三、补充链接
四、补充部分
关注公众号:【深漂程序员小庄】:
内含丰富的学习资源和面试经验(不限前端、java),还有学习交流群可加,并且还有各大厂大佬可一起交流学习,一起进步~添加小庄微信,回复【加群】,可加入互联网技术交流群: