Leetcode540 查詢有序陣列中的單一元素

2021-10-25 06:24:17 字數 861 閱讀 7790

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

示例 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)空間複雜度中執行。

解題思路

二分查詢加遞迴演算法

如果陣列長度為1,則返回唯一的元素,該元素也正是需要查詢的元素

如果中間元素與兩邊元素都不等,則該元素也是被查詢的元素

判斷兩邊剩餘元素個數的奇偶性,奇偶性不同,且中間元素與兩邊元素的相同性決定下一次遞迴的區間

int singlenonduplicate(int* nums, int numssize)

int mid;

int is_odd;

if (numssize == 1)

return nums[0];

mid = numssize/2;

printf("mid = %d\n",mid);   

if (nums[mid] != nums[mid-1] && nums[mid] != nums[mid+1])

return nums[mid];

is_odd = (numssize-mid-1) & 0x1;

printf("is_odd = %d,numssize =%d\n",is_odd,numssize);

if (is_odd)  else  else  else {

return singlenonduplicate(&nums[0], numssize-(mid+2));

LeetCode 540 有序陣列中的單一元素

給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。示例 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 空間複雜度中執行。這道題非常...

leetCode 540 有序陣列中的單一元素

給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。示例 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 空間複雜度中執行。由於只有乙...

leetcode540 有序陣列中的單一元素

題目中很明確的說了,需要o logn 的演算法,這簡直就是二分的代名詞。二分的本質是需要去找乙個性質,一半滿足另一半不滿足。這個性質就是,相等的兩個元素中的第乙個的下表一定是偶數。當你搜尋到某個下標時,如果它是偶數,那就看它 它的下乙個元素 如果它是奇數,那就它 它的前乙個元素。又根據異或的性質,偶...