A perfectly straight street is represented by a number line. The street has street lamp(s) on it and is represented by a 2D integer array lights
. Each lights[i] = [positioni, rangei]
indicates that there is a street lamp at position positioni
that lights up the area from [positioni - rangei, positioni + rangei]
(inclusive).
The brightness of a position p
is defined as the number of street lamp that light up the position p
.
Given lights
, return the brightest position on the street. If there are multiple brightest positions, return the smallest one.
Example 1:
Input: lights = [[-3,2],[1,2],[3,3]] Output: -1 Explanation: The first street lamp lights up the area from [(-3) - 2, (-3) + 2] = [-5, -1]. The second street lamp lights up the area from [1 - 2, 1 + 2] = [-1, 3]. The third street lamp lights up the area from [3 - 3, 3 + 3] = [0, 6].Position -1 has a brightness of 2, illuminated by the first and second street light. Positions 0, 1, 2, and 3 have a brightness of 2, illuminated by the second and third street light. Out of all these positions, -1 is the smallest, so return it.
Example 2:
Input: lights = [[1,0],[0,1]] Output: 1 Explanation: The first street lamp lights up the area from [1 - 0, 1 + 0] = [1, 1]. The second street lamp lights up the area from [0 - 1, 0 + 1] = [-1, 1]. Position 1 has a brightness of 2, illuminated by the first and second street light. Return 1 because it is the brightest position on the street.
Example 3:
Input: lights = [[1,2]] Output: -1 Explanation: The first street lamp lights up the area from [1 - 2, 1 + 2] = [-1, 3]. Positions -1, 0, 1, 2, and 3 have a brightness of 1, illuminated by the first street light. Out of all these positions, -1 is the smallest, so return it.
Constraints:
1 <= lights.length <= 105
lights[i].length == 2
-108 <= positioni <= 108
0 <= rangei <= 108
class Solution:
def brightestPosition(self, lights: List[List[int]]) -> int:
d = defaultdict(int)
for i, j in lights:
l, r = i - j, i + j
d[l] += 1
d[r + 1] -= 1
ans = s = mx = 0
for k in sorted(d):
s += d[k]
if mx < s:
mx = s
ans = k
return ans
class Solution {
public int brightestPosition(int[][] lights) {
TreeMap<Integer, Integer> d = new TreeMap<>();
for (var x : lights) {
int l = x[0] - x[1], r = x[0] + x[1];
d.merge(l, 1, Integer::sum);
d.merge(r + 1, -1, Integer::sum);
}
int ans = 0, s = 0, mx = 0;
for (var x : d.entrySet()) {
int v = x.getValue();
s += v;
if (mx < s) {
mx = s;
ans = x.getKey();
}
}
return ans;
}
}
class Solution {
public:
int brightestPosition(vector<vector<int>>& lights) {
map<int, int> d;
for (auto& x : lights) {
int l = x[0] - x[1], r = x[0] + x[1];
++d[l];
--d[r + 1];
}
int ans = 0, s = 0, mx = 0;
for (auto& [i, v] : d) {
s += v;
if (mx < s) {
mx = s;
ans = i;
}
}
return ans;
}
};
func brightestPosition(lights [][]int) (ans int) {
d := map[int]int{}
for _, x := range lights {
l, r := x[0]-x[1], x[0]+x[1]
d[l]++
d[r+1]--
}
keys := make([]int, 0, len(d))
for i := range d {
keys = append(keys, i)
}
sort.Ints(keys)
mx, s := 0, 0
for _, i := range keys {
s += d[i]
if mx < s {
mx = s
ans = i
}
}
return
}
/**
* @param {number[][]} lights
* @return {number}
*/
var brightestPosition = function (lights) {
const d = new Map();
for (const [i, j] of lights) {
const l = i - j;
const r = i + j;
d.set(l, (d.get(l) ?? 0) + 1);
d.set(r + 1, (d.get(r + 1) ?? 0) - 1);
}
const keys = [];
for (const k of d.keys()) {
keys.push(k);
}
keys.sort((a, b) => a - b);
let ans = 0;
let s = 0;
let mx = 0;
for (const i of keys) {
s += d.get(i);
if (mx < s) {
mx = s;
ans = i;
}
}
return ans;
};