在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3] 输出:4 示例 2:
输入:nums = [9,1,7,9,7,9,7] 输出:1
限制:
1 <= nums.length <= 10000 1 <= nums[i] < 2^31
解法一:
不排序,使用双重 for 循环进行查找,使用 HashMap 记录出现次数。
class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int num : nums) {
if (hashMap.containsKey(num)) {
hashMap.put(num, hashMap.get(num) + 1);
} else {
hashMap.put(num, 1);
}
}
for (Map.Entry<Integer, Integer> integerIntegerEntry : hashMap.entrySet()) {
if (integerIntegerEntry.getValue() == 1) {
return integerIntegerEntry.getKey();
}
}
return 0;
}
}
解法二:
先排序,再用 for 循环查找,如果当前元素和后两个元素不相同,则当前元素就是要找的数字,如果遍历到最后一个元素,则该元素为所求。注意遍历时是 i = i + 3。
class Solution {
public int singleNumber(int[] nums) {
if (nums.length == 1) {
return nums[0];
}
int result = nums[0];
Arrays.sort(nums);
for (int i = 0; i < nums.length; i += 3) {
if (i == nums.length - 1 || nums[i] != nums[i + 2]) {
result = nums[i];
break;
}
}
return result;
}
}