- 极大极小游戏">A: 极大极小游戏
- 划分数组使最大差为 K">B: 划分数组使最大差为 K
- 替换数组中的元素">C: 替换数组中的元素
- 设计一个文本编辑器">D:设计一个文本编辑器
- 复盘
不积跬步,无以至千里;不积小流,无以成江海
时间:2020-6-5 https://leetcode.cn/contest/weekly-contest-296 讨论:https://leetcode.cn/circle/discuss/twBVIo/ 代码地址:
A: 极大极小游戏
思路:
关键点:
function minMaxGame(nums: number[]): number {
while(nums.length > 1) {
let n = nums.length;
let tmp = [];
for (let i = 0; i < n; i += 2) {
if (i % 4 == 2) {
tmp.push(Math.max(nums[i], nums[i + 1]));
} else {
tmp.push(Math.min(nums[i], nums[i + 1]));
}
}
nums = tmp;
}
return nums[0];
};
总结:
B: 划分数组使最大差为 K
思路:
关键点:
function partitionArray(nums: number[], k: number): number {
if (!nums.length) return 0;
nums.sort((a, b) => a - b);
let ans = 1;
let prev = nums[0] + k;
for (let num of nums) {
if (num <= prev) continue;
prev = num + k;
ans++;
}
return ans;
};
总结:
C: 替换数组中的元素
思路:
关键点:
function arrayChange(nums: number[], operations: number[][]): number[] {
const n = nums.length;
let hashMap = new Map(nums.map((v, i) => [v, i]));
for (let [oldVal, newVal] of operations) {
let idx = hashMap.get(oldVal);
hashMap.delete(oldVal);
hashMap.set(newVal, idx);
}
let ans = new Array(n);
for (let [val, key] of hashMap.entries()) {
ans[key] = val;
}
return ans;
};
总结:
D:设计一个文本编辑器
思路:
关键点:
总结: