var sortRange = (range) => { if (range && range.length) { this.rangeList.push(range) } return this.rangeList.sort((a, b) => a[0] - b[0]);}var = merge(list, range) => { const list = sortRange(list, range) let res = []; let prev = list[0]; for (let i = 1; i < list.length; i++) { let cur = list[i]; if (prev[1] >= cur[0]) { prev[1] = Math.max(cur[1], prev[1]); } else { res.push(prev); prev = cur; } } res.push(prev); return res;}
LeetCode 1272. 删除区间
var = removeCoveredRange(list, range) => {
const [start, end] = range
let res = []
for (let j = 0; j < list.length; j++) {
const [currentStart, currentEnd] = list[j]
if(currentEnd <= start || currentStart >= end) {
res.push(list[j]);
} else {
if (currentStart < start) {
res.push([currentStart, start]);
}
if (currentEnd > end) {
res.push([end, currentEnd]);
}
}
}
return res;
}
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {number[][]}
*/
var pathSum = function(root, targetSum) {
var res = []
var tmp = []
var dfs = (node, sum) => {
if (node === null) return
const newSum = targetSum - node.val
tmp.push(node.val)
// 到叶子节点
if (node.left === null && node.right === null && newSum === 0) {
res.push(tmp)
}
dfs(node.left, newSum)
dfs(node.right, newSum)
tmp.pop()
}
dfs(root, targetSum)
return res
};
/**
* @param {number[]} coins
* @param {number} amount
* @return {number}
*/
// dp[i] = Math.min(dp[i], dp[i - coin] + 1)
var coinChange = function(coins, amount) {
let dp = new Array(amount + 1).fill(Infinity);// 初始化dp数组
dp[0] = 0;// 面额0只需要0个硬币兑换
for (let i = 1; i <= amount; i++) {// 循环面额
for (let coin of coins) {// 循环硬币数组
if (i - coin >= 0) {// 当面额大于硬币价值时
// dp[i - coin]: 当前面额i减当前硬币价值所需要的最少硬币
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
}
}
}
return dp[amount] === Infinity ? -1 : dp[amount];
};
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} headA
* @param {ListNode} headB
* @return {ListNode}
*/
var getIntersectionNode = function(headA, headB) {
if (headA === null || headB === null) {
return null;
}
let pA = headA, pB = headB;
// 双指针:两个速度相同,简单理解就是两个ListNode x + y = y + x
while (pA != pB) {
pA = pA == null ? headB : pA.next;
pB = pB == null ? headA : pB.next;
}
return pA;
};