每日题单 · 2026-09-23
用法
每题先自己写 25 分钟(时间盒),卡住就找我要档位提示;做完把 [x] 勾上。 复盘题不写新笔记,直接在原文出处下方追加「二刷日期 + 一句话卡点」。
🆕 新题(codetop 前端岗频率榜)
| 题目 | 难度 | 频率 | 状态 |
|---|---|---|---|
| 补充题4. 手撕快速排序 | 中等 | 29 | 🆕 |
| 215. 数组中的第K个最大元素 | 中等 | 29 | 🔁(已刷过,重做) |
🔁 复盘(vault 轮换池)
| 题目 | 难度 | 频率 | 备注 |
|---|---|---|---|
| 数据流的中位数 | 困难 | 1 | 复盘 · 出处:GRD 堆 |
| 合并 K 个升序链表 | — | — | 复盘 · 出处:GRD 堆 |
完成打卡
- 新题 1:补充题4. 手撕快速排序
/**
* 快速排序(Hoare 双指针对撞分区 + 随机基准防退化)
* @param {number[]} nums
* @return {number[]}
*/
var sortArray = function(nums) {
function quickSort(l, r) {
if (l >= r) return;
const pivot = nums[Math.floor(Math.random() * (r - l + 1)) + l];
let i = l, j = r;
while (i <= j) {
while (nums[i] < pivot) i++;
while (nums[j] > pivot) j--;
if (i <= j) {
[nums[i], nums[j]] = [nums[j], nums[i]];
i++;
j--;
}
}
quickSort(l, j);
quickSort(i, r);
}
quickSort(0, nums.length - 1);
return nums;
};- 新题 2:215. 数组中的第K个最大元素
/**
* 快速选择 QuickSelect(Hoare 双指针分区 + 随机基准 + 门神定位法)
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var findKthLargest = function(nums, k) {
const target = nums.length - k;
const qs = (l, r) => {
if (l >= r) return nums[target];
const randomIndex = Math.floor(Math.random() * (r - l + 1)) + l;
const pivot = nums[randomIndex];
let i = l, j = r;
while (i <= j) {
while (nums[i] < pivot) i++;
while (nums[j] > pivot) j--;
if (i <= j) {
[nums[i], nums[j]] = [nums[j], nums[i]];
i++;
j--;
}
}
// 门神法则:入左院、进右院、夹中间直取果
if (target <= j) return qs(l, j);
if (target >= i) return qs(i, r);
return nums[target];
};
return qs(0, nums.length - 1);
};- 复盘 1
- 复盘 2