携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
剑指 Offer 56 - II. 数组中数字出现的次数 II
Leetcode:leetcode.cn/problems/sh…
GitHub : github.com/nateshao/le…
剑指 Offer 56 - II. 数组中数字出现的次数 II
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3]
输出:4
示例 2:
输入:nums = [9,1,7,9,7,9,7]
输出:1
思路:hashmap
/**
* hashmap
*
* @param nums
* @return
*/
public int singleNumber(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
Integer a = map.getOrDefault(nums[i], 0);
map.put(nums[i], a + 1);
}
for (Integer a : map.keySet()) {
if (map.get(a) == 1) return a;
}
return -1;
}
位运算
public int singleNumber2(int[] nums) {
int ones = 0, twos = 0;
for(int num : nums){
ones = ones ^ num & ~twos;
twos = twos ^ num & ~ones;
}
return ones;
}
滑动窗口
func singleNumber(nums []int) (ans int) {
var left int
mp := make(map[int]int)
for i := 0; i < len(nums); i++ {
mp[nums[i]]++
for mp[nums[left]] == 3 {
left++
}
}
return nums[left]
}
\