leetcode 陣列中只出現一次的數字

2022-07-05 16:24:14 字數 2012 閱讀 6753

給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。

示例 1:

輸入: [1,1,2,3,3,4,4,8,8]

輸出: 2

示例 2:

輸入: [3,3,7,7,10,11,11]

輸出: 10

注意: 您的方案應該在 o(log n)時間複雜度和 o(1)空間複雜度中執行。

a)使用線性時間異或運算:

b)實現規定時間複雜度的方法

a)使用異或運算實現的**

1

package

cn.zifuchuan;23

public

class

test7 ;

7system.out.println(singlenonduplicate(nums));8}

910public

static

int singlenonduplicate(int

nums)

15return

temp;16}

17 }

b)二分法查詢實現

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, 3

] 也是正確答案。

2、你的演算法應該具有線性時間複雜度。你能否僅使用常數空間複雜度來實現?

a)位運算實現

1

public

int singlenumber(int

nums)

7return

a;8 }

b)排序之後實現

1

public

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思路 異或法,根據異或運算的特點,相同的數字經過...