単一の要素は、の配列を命じ
Input: [1, 1, 2, 3, 3, 4, 4, 8, 8]
Output: 2
件名の説明:
注文した配列は、この番号を見つけるために、2回表示されません唯一の番号を持っています。
アイデアの分析:
溶液はXOR演算を解決するために、アレイを横断することができない、したがってO(LGN)の時間計算量を必要とし、時間複雑度はO(N)で行われます。
インデックスがペアに元々存在する状態配列が切断され、インデックスの後、唯一の配列のインデックスの数として表示させます。mが偶数であり、m + 1 <指数、次いでNUMS [M] == NUMS [M + 1]であればM + 1> =指数、次いでNUMS [m]をある場合!= NUMS [M + 1]。
法律上から知られているNUMS [m]の場合、NUMS [M] == NUMS [M + 1]であれば、インデックスは、[M + 2、H]で存在しています!= NUMS [M + 1]は、インデックスが[L、M]で存在します。代入式Hは、H = Mであるので、それが唯一のループ条件L <Hにこのフォームを使用することができます。
コード
public int singleNonDuplicate(int []nums){
int l=0;
int h=nums.length-1;
while(l<h){
int m=l+(h-l)/2;
if(m%2==1)
m--; //保证l/h/m都在偶数位
if(nums[m]==nums[m+1]){
l=m+2;
}else{
h=m;
}
}
return nums[l];
}