[LeetCode]single-number
阿新 • • 發佈:2018-08-16
integer near csdn mem tail ext 滿足 相同 返回
題目:Given an array of integers, every element appears twice except for one. Find that single one.
Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
題目理解:一個數組中有一個數是單獨的,其他的數都是成對出現的。
簡單做法:
首先,對數組進行排序,然後遍歷數組,成對比較數組元素,找出首個不相等的數組元素,返回該元素,則該元素就是數組中唯一的單個元素。由於排序使用的是快排,故滿足需求。
代碼:
1 import java.util.Arrays; 2 public class Solution { 3 public int singleNumber(int[] A) { 4 if(A.length == 1) return A[0]; 5 Arrays.sort(A); 6 for(int i = 1;i < A.length;){ 7 if(A[i-1] != A[i]){ 8 return A[i-1]; 9 }10 i += 2; 11 } 12 return 0; 13 } 14 }
進階版做法(使用位運算):
異或運算中二個參與運算的對象(二進制)相應位相同,值為0,否則為1.即1^1=0,1^0=1,0^0=0,0^1=1。由這個特性,得到從零開始異或數組元素中每個值,最終剩下的就是數組中單獨的那個數,成對的數都異或為0了。
例如:數組為 1 2 1 4 4
0^1 = 0000 0001 = 1
1^2 = 0000 0011 = 3
3^1 = 0000 0010 = 2
2^4 = 0000 0110 = 6
6^4 = 0000 0010 = 2
最後得到數組中唯一的數2.
代碼:
1 public classSolution { 2 public int singleNumber(int[] A) { 3 int ret = 0; 4 for(int i=0;i<A.length;i++){ 5 ret^=A[i]; 6 } 7 return ret; 8 } 9 }
參考資料:
位運算總結:https://blog.csdn.net/sinat_35121480/article/details/53510793
[LeetCode]single-number