1620. 网络信号最好的坐标
采用暴力的方法;
首先确定扫描区域;
(0, 0)到(xMax, yMax);
然后再求出各个基站对该点的辐射值,如果辐射距离符合题目要求,则把辐射值累加上去;
每完成一个扫描点,及时更新最大辐射值和答案坐标;
for(int i = 0; i <= xMax; i++) {
for(int j = 0; j <= yMax; j++) {
int cur = 0;
for(int[] tower : towers) {
int diss = (tower[0] - i) * (tower[0] - i) + (tower[1] - j) * (tower[1] - j);
if(diss <= radius * radius) {
double dis = Math.sqrt(diss);
cur += (int)Math.floor(tower[2] / (1 + dis));//叠加
}
}
if(cur > ansMax) {
ansMax = cur;
xAns = i;
yAnx = j;
}
}
}
457. 环形数组是否存在循环
boolean check(int start) {
int cur = start;
boolean flag = nums[start] > 0;
int k = 1;
while(true) {
if(k > n) return false;抽屉原理,必然有数被重复处理了,同时条件一并不符合,因此再处理下去,也不会到达与起点相同的下标
int next = ((cur + nums[cur]) % n + n) % n;无论向右 or 向左移动都不会越界
if(flag && nums[next] < 0) return false;//next判断下一个位置遇上一个位置的移动方向是否相同。及数字符号是否相同
if(!flag && nums[next] > 0) return false;//next判断下一个位置遇上一个位置的移动方向是否相同。及数字符号是否相同
if(next == start) return k > 1;//star回到最初的位置. k > 1
cur = next;
k++;
}
}
454. 四数相加 II
暴力;
Map<Integer, Integer> map = new HashMap<>();
for(int a : nums1) {
for(int b : nums2) {
map.put(a + b, map.getOrDefault((a + b), 0) + 1);值和出现次数
}
}
int ans = 0;
for(int c : nums3) {
for(int d : nums4) {
if(map.containsKey(-(c + d))) {
ans += map.get(-c - d);
}
}
}
448. 找到所有数组中消失的数字
暴力;
Set
for(int num : nums) {
set.add(num);
}
for(int i = 1; i <= n; i++) {
if(!set.contains(i)) {
ans.add(i);
}
}
414. 第三大的数
Arrays.sort(nums);
TreeSet
for(int num : nums) {
set.add(num);
if(set.size() > 3) {因为TreeSet从后面近入,后面进入的一定是比前面先进入的大
set.remove(set.first());保持三个数字
}
}
return set.size() == 3 ? set.first() : set.last();