leetcode解題之136 #Single Number Java版(只出現一次的數字)
阿新 • • 發佈:2018-12-26
136. Single Number
Given an array of integers, every element appearstwice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
使用map:
public int singleNumber(int[] nums) { int i = 0; int j = nums.length - 1; Map<Integer, Integer> map = new HashMap<>(); while (i <= j) { if (map.containsKey(nums[i])) map.put(nums[i], map.get(nums[i])+1); else map.put(nums[i], 1); i++; } i = 0; while (i <= j) { if (map.get(nums[i]) == 1) break; i++; } return nums[i]; }
使用異或運算:
如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
0與任何數做異或都是 那個數,相同的數字做異或等於0;
1. a ^ b = b ^ a
2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
public int singleNumber(int[] nums) { int result = nums[0]; for (int i = 1; i < nums.length; i++) { result = result ^ nums[i]; } return result; }