754. 到达终点数字
找规律;
target = Math.abs(target);目标值无需管正负,因为只需要加一个负号即可
int sum = 0;
int index = 0;
while(sum < target) {直到大于target为止
index++;
sum += index;
}
int ans = sum - target;
if(ans % 2 == 0) {相差一个偶数,证明只需要将前面计算中的一个数字的符号改为“-”即可
return index;
}else {
if(index % 2 == 0) {相差不为负数,且 index为偶数
return index + 1;
}else {相差不为负数,且 index为奇数
return index + 2;
}
}
566. 重塑矩阵
if(row * col != r * c) return mat;//attention
628. 三个数的最大乘积
Arrays.sort(nums);
int n = nums.length;
return Math.max(nums[0] * nums[1] * nums[n - 1], nums[n - 1] * nums[n - 2] * nums[n - 3]);因为有负数的存在,所以,有前两个小的数字和最大的数字的乘积
561. 数组拆分
排个序,隔着加;
Arrays.sort(nums);
int sum = 0;
for(int i = 0; i < nums.length; i += 2) {
sum += nums[i];
}
532. 数组中的 k-diff 数对
int sum = 0;
if(k < 0) return sum;
Map<Integer, Integer> map = new HashMap<>();
for(int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
for(int num : map.keySet()) {
if(k == 0) {
if(map.get(num) > 1) {
sum ++;//++
}
}else {
if(map.containsKey(num + k)) {
sum ++;//++
}
}
}
return sum;