小白的算法之路3

只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

示例1:

输入: [2,2,1]
输出: 1

示例2;

输入: [4,1,2,1,2]
输出: 4

 标准参考一:

class Solution {
    public int singleNumber(int[] A) {
        if (A == null || A.length == 0) {
            return -1;
        }
        int rst = 0;
        for (int aA : A) {
            rst ^= aA;
        }
        return rst;
    }
}

小白答案:

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
class Solution {
    public int singleNumber(int[] nums) {
        HashMap<Integer,Integer> map=new HashMap<>();
		for(int i=0;i<nums.length;i++) {
			if(map.containsKey(nums[i])) {
				map.put(nums[i], map.get(nums[i])+1);
			}else {
				map.put(nums[i], 1);
			}
		}
		int temp=0;
		Set<Entry<Integer, Integer>>  set=map.entrySet();
		for(Entry<Integer, Integer> s:set) {
			if(s.getValue()==1) {
				temp=s.getKey();
				break;
			}
		}
		return temp;
    }
}

 解读参考答案,其实发现自己的想法是和参考一样的,都向通过某个类或者是某种操作自带的特性实现。但不巧的是,参考发现的特性,使用的特性,很巧。自己使用的HashMap进行键值对的映射记录,但是参考则是很巧的利用了异或这个操作。

a^b^a^c^b=c,所以要找到对应的单个数字,仅仅是只是将数组中的元素进行异或操作即可,值得学习借鉴!

猜你喜欢

转载自blog.csdn.net/m0_37265215/article/details/81462367
今日推荐