从一个数组中寻找出现奇数次的数字

 

 假设给定了数组nums为[0,1,2,3,4,5,6,7,8,9,10,10,9,8,7,6,5,4,1,2,3,3,0]

其中3出现了3次

而其他数字都出现了两次

则我们应该得到结果为3

第一种方式:使用Hash

 1     /**
 2      * 使用hash
 3      * */
 4     public static int singleNumber_1(int[] nums) {
 5         Map<Integer, Integer> map = new HashMap<>();
 6         for(Integer num : nums) {
 7             /*
 8              *  1.remove与put操作相对耗费时间
 9              *  
10              *     if(map.containsKey(num)) {
11              *        map.remove(num);
12              *    }else {
13              *        map.put(num, 0);
14              *    }
15              * **/
16             if(map.get(num) != null) {
17                 map.put(num, map.get(num)+1);
18             }else {
19                 map.put(num, 1);
20             }
21         }
22         int result = -1;
23         for(Integer key : map.keySet()) {
24             if(map.get(key)%2 != 0) {
25                 result = key;
26             }
27                 
28         }
29         return result;
30     }
View Code

第二种方式:使用^

 1     /**
 2      * 异或
 3      * a^b^c^b^a = (a^a)(b^b)^c = 0^c = c
 4      * */
 5     public static int singleNumber_2(int [] nums) {
 6         int ans = nums[0];
 7         if (nums.length > 1) {
 8            for (int i = 1; i < nums.length; i++) {
 9               System.out.println(ans + "^" + nums[i] + ":");
10               ans = ans ^ nums[i];
11               System.out.println(ans);
12            }
13          }
14          return ans;
15     }
View Code

 

posted @ 2019-09-05 14:08  亲爱的坨  阅读(1158)  评论(0编辑  收藏  举报