输入整数数组 arr
,找出其中最小的 k
个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
示例 1:
示例 2:
限制:
1 2
| 0 <= k <= arr.length <= 10000 0 <= arr[i] <= 10000
|
个人解答
冒泡排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
const getLeastNumbers = function (arr, k) { const len = arr.length; for (let i = len - 1; i > 0; i--) { for (let j = 0; j < i; j++) { if (arr[j] > arr[i]) { let tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } } return arr.slice(0, k); };
|
Array.sort
1 2 3 4 5 6 7 8
|
const getLeastNumbers = function (arr, k) { return (arr.sort((a, b) => a - b)).slice(0, k); }
|
快速排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
const getLeastNumbers = function (arr, k) { return quickSort(arr).slice(0, k); } function quickSort(arr) { const len = arr.length; if (len <= 1) { return arr; } else { const bigger = []; const smaller = []; const base = [arr[0]]; for (let i = 1; i < len; i++) { if (arr[i] <= base[0]) { smaller.push(arr[i]); } else { bigger.push(arr[i]); } } return [...quickSort(smaller), ...base, ...quickSort(bigger)]; } }
|
执行结果
最优秀一次提交,用的是 Array.sort
:
提交结果 |
执行用时 |
内存消耗 |
通过 |
124 ms |
39.3 |