题目概述(简单难度)
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3]
输出:4
示例 2:
输入:nums = [9,1,7,9,7,9,7]
输出:1
题目链接:
点我进入leetcode
思路与代码
思路1(遍历数组法)
我的思路是先对数组进行排序后在遍历,使用一个计数器来寻找我们只出现过一次的数字.
代码示例
class Solution {
public int singleNumber(int[] nums) {
Arrays.sort(nums);
//计数器
int count = 0;
for(int i =0;i < nums.length;i++) {
if( i != nums.length-1 && nums[i] == nums[i+1]) {
count++;
}else if(i == 0 && nums[i] != nums[i+1]) {
return nums[i];
}else if(i != nums.length-1 && nums[i] != nums[i+1] && nums[i] == nums[i-1]){
continue;
}
if(count == 0) {
return nums[i];
}
if(count == 2) {
count = 0;
continue;
}
}
return 0;
}
}
思想2(哈希)
将所有数组元素存入到我们的hashmap当中去,作为key,value为数组元素出现的次数,最后输出value值为1的元素,即为数组中出现一次的元素
class Solution {
public int singleNumber(int[] nums) {
Map<Integer, Integer> map = new HashMap();
for(int i = nums.length - 1; i >= 0; --i){
int key = nums[i];
if(!map.containsKey(key)){
// 如果之前没有遇到这一数字,则放入 map 中
map.put(key, 1);
}else{
// 如果之前遇到过这一数字,则出现次数加 1
map.put(key, map.get(key) + 1);
}
}
for(Map.Entry<Integer, Integer> entry: map.entrySet()){
if(entry.getValue() == 1){
return entry.getKey();
}
}
return -1;
}
}
总结
考察对于数组和hashmap的掌握