Skip to content

Commit 9fb0088

Browse files
committed
feat: leetcode contest 292
1 parent 8cd59da commit 9fb0088

File tree

4 files changed

+97
-0
lines changed

4 files changed

+97
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* @param {string} num
3+
* @return {string}
4+
*/
5+
const largestGoodInteger = function (num) {
6+
let ans = ''; let m = -1
7+
for (let i = 0; i <= num.length - 3; i++) {
8+
const x = num.charCodeAt(i) - '0'.charCodeAt(0)
9+
if (x > m && num[i] === num[i + 1] && num[i] === num[i + 2]) {
10+
ans = num.slice(i, i + 3)
11+
m = x
12+
}
13+
}
14+
return ans
15+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root
11+
* @return {number}
12+
*/
13+
var averageOfSubtree = function(root) {
14+
let ans = 0
15+
const dfs = (node) => {
16+
if (!node) return [0, 0]
17+
let [l, lCnt] = dfs(node.left)
18+
let [r, rCnt] = dfs(node.right)
19+
let sum = (l+r+node.val), cnt = lCnt+rCnt+1
20+
if (Math.floor(sum / cnt) === node.val) ans++
21+
return [sum, cnt]
22+
}
23+
dfs(root)
24+
return ans
25+
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
const P = 1e9 + 7
2+
const dp3 = [1]; const dp4 = [1]
3+
for (let i = 1; i < 1e5 + 10; i++) {
4+
dp3[i] = ((dp3[i - 1] ?? 0) + (dp3[i - 2] ?? 0) + (dp3[i - 3] ?? 0)) % P
5+
dp4[i] = ((dp4[i - 1] ?? 0) + (dp4[i - 2] ?? 0) + (dp4[i - 3] ?? 0) + (dp4[i - 4] ?? 0)) % P
6+
}
7+
8+
/**
9+
* @param {string} pressedKeys
10+
* @return {number}
11+
*/
12+
const countTexts = function (pk) {
13+
const n = pk.length
14+
let ans = 1
15+
for (let i = 0; i < n;) {
16+
let j = i; const ch = pk[i]
17+
while (j < n && pk[j] === ch) {
18+
j++
19+
}
20+
// console.log(i, j, j-i, dp[j-i])
21+
const dp = '79'.includes(ch) ? dp4 : dp3
22+
ans = Number((BigInt(ans) * BigInt(dp[j - i])) % BigInt(P))
23+
i = j
24+
}
25+
return ans
26+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {character[][]} grid
3+
* @return {boolean}
4+
*/
5+
const hasValidPath = function (grid) {
6+
const m = grid.length; const n = grid[0].length
7+
grid = grid.map(g => g.map((a) => a === '(' ? 1 : -1))
8+
if ((m + n) % 2 === 0) return false
9+
const max = Array(m).fill(0).map(() => Array(n).fill(-1e5))
10+
const min = Array(m).fill(0).map(() => Array(n).fill(1e5))
11+
if (grid[0][0] >= 0) min[0][0] = grid[0][0], max[0][0] = grid[0][0]
12+
// console.log(grid)
13+
for (let i = 0; i < m; i++) {
14+
for (let j = 0; j < n; j++) {
15+
// 从 [i-1, j] 过来
16+
if (i >= 1) {
17+
// tmpMin < 0 但是 tmpMax >= 0 的情况,我们 i, j 仍然合法,min 值为 0
18+
const tmpMin = min[i - 1][j] + grid[i][j]; const tmpMax = max[i - 1][j] + grid[i][j]
19+
if (tmpMax >= 0) min[i][j] = Math.min(min[i][j], Math.max(tmpMin, 0))
20+
if (tmpMax >= 0) max[i][j] = Math.max(max[i][j], tmpMax)
21+
}
22+
// 从 [i, j-1] 过来
23+
if (j >= 1) {
24+
const tmpMin = min[i][j - 1] + grid[i][j]; const tmpMax = max[i][j - 1] + grid[i][j]
25+
if (tmpMax >= 0) min[i][j] = Math.min(min[i][j], Math.max(tmpMin, 0))
26+
if (tmpMax >= 0) max[i][j] = Math.max(max[i][j], tmpMax)
27+
}
28+
}
29+
}
30+
return min[m - 1][n - 1] === 0 && max[m - 1][n - 1] >= 0
31+
}

0 commit comments

Comments
 (0)