今日心情:生活在慢慢走上正轨,慢慢走总能达到想去的地方。
题目描述:
LeetCode 剑指 Offer 56 - II. 数组中数字出现的次数 II
在一个数组
nums
中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
解题代码 1:
(题解的思路我是真的想不出来用的状态机:指路K神题解 👉 链接🔗 )
class Solution {
public int singleNumber(int[] nums) {
int ones = 0, twos = 0;
for(int num : nums){
ones = ones ^ num & ~twos;
twos = twos ^ num & ~ones;
}
return ones;
}
}
解题代码 2:
(自己想的但是空间复杂度不满足O(1),使用了HashMap进行记录找没有重复的数)
class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer,Boolean> map = new HashMap<>();
for(int num:nums){
map.put(num,!map.containsKey(num));
}
for(Map.Entry<Integer,Boolean> entry : map.entrySet()){
if(entry.getValue()){
return entry.getKey();
}
}
return -1;
}
}
解题代码 3:
(采用for循环遍历方法 :找对应num是否为非重复数)
class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer,Boolean> map = new HashMap<>();
for(int num:nums){
map.put(num,!map.containsKey(num));
}
for(int num : nums){
if(map.get(num)){
return num;
}
}
return -1;
}
}
题解代码是真的看不懂,等我真的理解了题解的状态机方法再来更新吧。