Skip to content

Commit d50d2f4

Browse files
committed
feat: leetcode contest 314
1 parent bb7660e commit d50d2f4

6 files changed

+143
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number} n
3+
* @param {number[][]} logs
4+
* @return {number}
5+
*/
6+
var hardestWorker = function(n, logs) {
7+
let l = 0, mp = {}
8+
for (let i = 0; i < logs.length; i++) {
9+
logs[i].push(logs[i][1] - (logs[i-1]?.[1] ?? 0))
10+
}
11+
logs.sort((a, b) => {
12+
if (a[2] === b[2]) return a[0]-b[0]
13+
return -(a[2]-b[2])
14+
})
15+
// console.log(logs)
16+
return logs[0][0]
17+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/**
2+
* @param {number[]} pref
3+
* @return {number[]}
4+
*/
5+
var findArray = function(pref) {
6+
let ans = [pref[0]], t = pref[0]
7+
for (let i = 1; i < pref.length; i++) {
8+
ans.push(t^pref[i])
9+
t ^= t^pref[i]
10+
}
11+
return ans
12+
};
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @param {string} s
3+
* @return {string}
4+
*/
5+
const robotWithString = function (s) {
6+
s = s.split('')
7+
const n = s.length
8+
const min = []; let ans = ''
9+
min[n] = n, s[n] = String.fromCharCode('z'.charCodeAt(0) + 1)
10+
for (let i = n - 1; i >= 0; i--) {
11+
if (s[i] <= s[min[i + 1]]) min[i] = i
12+
else min[i] = min[i + 1]
13+
}
14+
// console.log(min)
15+
const stk = []
16+
let i = min[0]
17+
for (let j = 0; j <= i; j++) stk.push(s[j])
18+
while (i < n) {
19+
ans += stk.pop()
20+
oldI = i
21+
i = min[i + 1]
22+
while (stk.length && stk[stk.length - 1] <= s[i]) ans += stk.pop()
23+
for (let j = oldI + 1; j <= i; j++) stk.push(s[j])
24+
}
25+
while (stk.length) ans += stk.pop()
26+
return ans.slice(0, -1)
27+
// "bdevfziy"
28+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {number[][]} grid
3+
* @param {number} k
4+
* @return {number}
5+
dp[i][j][l] 模 k 为 l 的方案数量
6+
*/
7+
const numberOfPaths = function (g, k) {
8+
const m = g.length; const n = g[0].length; const P = 1e9 + 7
9+
const dp = Array(m).fill(0).map(() => Array(n).fill(0).map(() => Array(k).fill(0)))
10+
for (let i = 0; i < m; i++) {
11+
for (let j = 0; j < n; j++) {
12+
for (let l = 0; l < k; l++) {
13+
if (i === 0 && j === 0) {
14+
if (l === (g[i][j] % k)) dp[i][j][l] = 1
15+
else dp[i][j][l] = 0
16+
continue
17+
}
18+
19+
const l1 = ((l - g[i][j]) % k + k) % k
20+
let sum = 0
21+
if (i - 1 >= 0) sum += dp[i - 1][j][l1]
22+
if (j - 1 >= 0) sum += dp[i][j - 1][l1]
23+
// if (Number.isNaN(sum)) console.log(i, j, l, l1, dp[i][j-1][l1])
24+
dp[i][j][l] = sum % P
25+
}
26+
}
27+
}
28+
// console.log(dp)
29+
return dp[m - 1][n - 1][0]
30+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[]}
4+
*/
5+
const replaceNonCoprimes = function (nums) {
6+
const s = []
7+
const gcd = (a, b) => b ? gcd(b, a % b) : a
8+
for (let a of nums) {
9+
if (!s.length) {
10+
s.push(a)
11+
continue
12+
}
13+
let b = s[s.length - 1]
14+
let d = gcd(a, b)
15+
16+
while (s.length && d > 1) {
17+
s.pop()
18+
a = a / d * b, b = s[s.length - 1]
19+
d = gcd(a, b)
20+
}
21+
s.push(a)
22+
}
23+
return s
24+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* @param {character[][]} matrix
3+
* @return {number}
4+
*/
5+
const maximalRectangle = function (g) {
6+
const m = g.length; const n = g[0].length
7+
const f = Array(n).fill(0)
8+
let ans = 0
9+
for (let i = 0; i < m; i++) {
10+
for (let j = 0; j < n; j++) {
11+
f[j] = (g[i][j] === '0') ? 0 : (f[j] + 1)
12+
}
13+
f[-1] = -1, f[n] = -1
14+
const l = []; const r = []
15+
let s = [-1]
16+
for (let i = 0; i < n; i++) {
17+
while (f[s[s.length - 1]] >= f[i]) s.pop()
18+
l[i] = s[s.length - 1]
19+
s.push(i)
20+
}
21+
s = [n]
22+
for (let i = n - 1; i >= 0; i--) {
23+
while (f[s[s.length - 1]] >= f[i]) s.pop()
24+
r[i] = s[s.length - 1]
25+
s.push(i)
26+
}
27+
for (let i = 0; i < n; i++) {
28+
ans = Math.max(ans, f[i] * (r[i] - l[i] - 1))
29+
}
30+
}
31+
return ans
32+
}

0 commit comments

Comments
 (0)