1. 程式人生 > >[LeetCode]single-number

[LeetCode]single-number

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 class
Solution { 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