题目概述(简单难度)
在一个数组nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3] 输出:4
示例 2:
输入:nums = [9,1,7,9,7,9,7] 输出:1
题目链接:
思路与代码
思路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的掌握