給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。
示例 1:
輸入: [1,1,2,3,3,4,4,8,8]示例 2:輸出: 2
輸入: [3,3,7,7,10,11,11]注意: 您的方案應該在 o(log n)時間複雜度和 o(1)空間複雜度中執行。輸出: 10
a)使用線性時間異或運算:
b)實現規定時間複雜度的方法
a)使用異或運算實現的**
1b)二分法查詢實現package
cn.zifuchuan;23
public
class
test7 ;
7system.out.println(singlenonduplicate(nums));8}
910public
static
int singlenonduplicate(int
nums)
15return
temp;16}
17 }
1給定乙個整數陣列package
cn.zifuchuan;23
public
class
test7 ;
7system.out.println(singlenonduplicate(nums));8}
910//public static int singlenonduplicate(int nums)
15//
return temp;
16//}17
18public
static
int singlenonduplicate(int
nums) else
30 } else
if(nums[mid] == nums[mid + 1]) else38}
39 mid = (high - low) / 2 + low; //
二分中間位置
40 system.out.println("mid=" + mid + "mid:" +nums[mid]);41}
42//
system.out.println(mid);
43return
nums[low];44}
45 }
nums
,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。 找出只出現一次的那兩個元素。
示例 :
輸入: [1,2,1,3,2,5注意:]輸出: [
3,5]
1、結果輸出的順序並不重要,對於上面的例子, [5, 3a)位運算實現] 也是正確答案。
2、你的演算法應該具有線性時間複雜度。你能否僅使用常數空間複雜度來實現?
1b)排序之後實現public
int singlenumber(int
nums)
7return
a;8 }
1public
static
int singlenumber(int
nums) else
if(((i+1) < (len - 1)) && (nums[i] != nums[i + 1])) else13}
14return 0;
15 }
陣列中只出現一次
首先看看題目要求 陣列a中,除了某乙個數字 x之外,其他數字都出現了三次,而 x出現了一次。請給出最快的方法找到x。這個題目非常有意思,在本人部落格中有 位操作基礎篇之位操作全面總結 這篇文章介紹了使用位操作的異或來解決 陣列中其他數字出現二次,而x出現一次,找出x。有 這邊文章介紹了分組異或的方法...
陣列 leetcode 只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1示例 2 輸入 4,1,2,1,2 輸出 4實現說明 1 1 首先對陣列進行排序 2 一次遍...
leetcode 陣列 只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1示例 2 輸入 4,1,2,1,2 輸出 4思路 異或法,根據異或運算的特點,相同的數字經過...