描述:給出2*n + 1 個的數字,除其中一個數字之外其他每個數字均出現兩次,找到這個數字。
樣例:給出 [1,2,2,1,3,4,3],返回 4
挑戰:一次遍歷,常數級的額外空間復雜度(自主選擇)
思路:(1)先不考慮挑戰,自己看著寫出的代碼計算速度很慢也有很多優化的地方。但是畢竟是自己一點沒有參考寫出來的,希望自己能一點點進步吧。
(2)把數組中的數排序(從小到大)
(3)這種落單只有三種情況:
A. 1,1,2 這時最后兩個數不相等 即A[A.length-1]!=A[A.length-2] 時,落單就是最后一個數
B. 1,,2,2 這時數列最前邊兩個數不相等, 即A[0]!=A[1]時,落單就是第一個數
C. 1,1,2,3,3 這時落單的數在中間,和左右兩個數不相等 即這時的判斷條件為:A[i]!=A[i+1]&&A[i]!=A[i-1] 落單的數就是A[i]
AC代碼:
public class Solution { /** *@param A : an integer array *return : a integer */ public int singleNumber(int[] A) { // Write your code here int result=0; if(A.length==0) { return result; } if(A.length==1) { return A[0]; } for(int i=0;i<A.length-1;i++){ for(int j=i+1;j<A.length;j++){ if(A[i]>A[j]) { int temp=A[i]; A[i]=A[j]; A[j]=temp; } } } if(A[0]!=A[1]) { result=A[0]; } if(A[A.length-1]!=A[A.length-2]) { result=A[A.length-1]; } for(int i=1;i<A.length-1;i++) { if(A[i]!=A[i+1]&&A[i]!=A[i-1]) { result=A[i]; break; } } return result; }}優化算法后續上傳
新聞熱點
疑難解答