问:
解:
- 若当前和小于0,就舍弃当前和,重置为0继续
function maxSubArray(arr) {
let maxSub = Number.MIN_SAFE_INTEGER
let curSub = 0
for (let i = 0; i < arr.length; i++) {
curSub < 0 ? curSub = 0 : ''
curSub += arr[i]
maxSub = Math.max(curSub, maxSub)
}
return maxSub
}
- 对字符数少的版本号补零。
function compareVersion(version1, version2) {
const v1 = version1.split('.')
const v2 = version2.split('.')
let res = 0
while (v1.length < v2.length) {
v1.push(0)
}
while (v2.length <v1.length) {
v2.push(0)
}
while (v1.length) {
let val1 = v1.shift()
let val2 = v2.shift()
if (+val1 < val2) {
res = -1
break
}
if (+val1 > +val2) {
res = 1
break
}
}
return res
}
- 深度优先,当走到空时返回0,走到叶节点时返回累加和。
function sumNumbers(root) {
function getRes(node, preSum) {
if (!node) return 0
const cur = preSum * 10 + node.val
if (!node.right && !node.left) return cur
return getRes(node.left, cur) + getRes(node.right, cur)
}
return getRes(root, 0)
}
- 深度优先,走到空时返回false,走到叶节点时做一次判断。
function sumNumbers(root, targetSum) {
if (!root) return false
function getRes(node, preSum) {
if (!node) return false
preSum += node.val
if (!node.left && !node.right) return preSum === target
return getRes(node.left, preSum) || getRes(node.right, preSum)
}
return getRes(root, 0)
}
5.第一次遍历用哈希存值,第二次遍历,在哈希表中找需要的值
function twoSum(nums, target) {
const hashMap = new Map()
nums.forEach((val, idx) => {
hashMap.set(val, idx)
})
for (let i = 0; i < nums.length; i++) {
const idx = hashMap.get(target - nums[i])
if (idx && idx !== i) {
return [i, idx]
}
}
return []
}