题目:找出唯一成对的数
1~1000这1000个数放在含义1001个元素数组中,只有唯一的一个元素重复,其他值均只出现一次。
找出唯一重复的元素。
解析
如果nums的长度是 n+1;则 nums的序列1,2,3,… n
中间多出一个重复的数k ,则 nums中元素的和 比 1~n 的和 大于 k
计算两个序列的和,相减,即得到重复的数值k
1~n的和可以用高斯求和公式来求得
数组中元素和遍历相加
public static int violence(int[] nums) {
//高斯公式求和
int count = (nums.length) * (nums.length-1) / 2;
//数组遍历求和
int count2 = 0;
for (int num : nums) {
count2 += num;
}
return count2 - count;
}
题目:丢失的数字
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
解析
和上面的题目类似,不过是找缺失的数字,针对
- 0 ~ n求和
- 针对nums中元素求和
- 求差值
public static int lc268(int[] nums) {
int length = nums.length;
int n = length;
int count = (n+0) * (n + 1) / 2;
int count2 = 0;
for (int num : nums) {
count2 += num;
}
return count - count2;
}