Skip to content

Commit 7c7520b

Browse files
committed
feat: 1906. Minimum Absolute Difference Queries : 前缀和
1 parent 3d59588 commit 7c7520b

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number[][]} queries
4+
* @return {number[]}
5+
*/
6+
const minDifference = function (nums, queries) {
7+
const n = nums.length
8+
const idx = Array(101).fill(0).map(() => [])
9+
for (let i = 0; i < n; i++) idx[nums[i]].push(i)
10+
const ans = []
11+
for (const [a, b] of queries) {
12+
let last = -1; let min = 1e10
13+
for (let i = 1; i <= 100; i++) {
14+
// idx[i] 是否有 1 个值在 [a, b] 之间
15+
let l = 0; let r = idx[i].length - 1; let x; let y
16+
while (l < r) {
17+
const mid = l + r >> 1
18+
if (idx[i][mid] >= a) r = mid
19+
else l = mid + 1
20+
}
21+
if (!(idx[i][l] >= a)) continue
22+
// else x = l
23+
// l = 0, r = idx[i].length - 1
24+
// while (l < r) {
25+
// const mid = l + r + 1 >> 1
26+
// if (idx[i][mid] <= b) l = mid
27+
// else r = mid - 1
28+
// }
29+
// if (!(idx[i][l] <= b)) continue
30+
// else y = l
31+
// if (y - x + 1 >= 1) {
32+
if (idx[i][l] <= b) {
33+
if (last !== -1) min = Math.min(min, i - last)
34+
last = i
35+
}
36+
}
37+
ans.push(min === 1e10 ? -1 : min)
38+
}
39+
return ans
40+
}

0 commit comments

Comments
 (0)