问题是这样的:
给定一个非空整数数组,除一个元素外,每个元素出现两次。找到那一个。
输入:[4,1,2,1,2]
输出:4
我的代码是:
public static int singleNumber(int[] nums) {
int answer = 0;
for (int i =0; i<nums.length-1; i++) {
for(int j = i+1; j<nums.length; j++) {
if(nums[i] != nums[j]) {
answer = nums[i]; //this should be where I am wrong.
}
}
}
return answer;
}
我知道输出是 4,现在它会变成 1。 我正在尝试弄清楚如何在找到后不更改找到的值。
最佳答案
逻辑是错误的——你的内部循环找到了数组中不是唯一数字的每个数字。
我会维护一个 Set
来跟踪我遇到的数字。第一次遇到数字时,将其添加到 Set
中。第二次遇到它时,将其从 Set
中删除。遍历数组后,您将得到一个包含单个元素的 Set
,这就是您的答案:
public static int singleNumber(int[] nums) {
Set<Integer> unique = new HashSet<>();
for (int num : nums) {
// add returns true if num is indeed new to unique
if (!unique.add(num)) {
unique.remove(num);
}
}
return unique.iterator().next();
}
关于java - 使用 for 循环搜索值和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51070885/