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

2022-08-20 08:27:10 字數 1170 閱讀 2458

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

示例:

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

輸出: 2

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

輸出: 10

注意:

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

將陣列中的值進行異或,最終的結果就是只出現一次的數字。

class solution {

public:

int singlenonduplicate(vector& nums) {

int ans = nums[0];

for(int i=1; i這種思路沒有用到陣列有序這個條件,而且時間複雜度為 o(n),不是題目要求的 o(log n)。

題目要求時間複雜度為 o(log n),這就在暗示我們使用二分查詢來做。二分查詢的關鍵點就是如何更新 left 和 right。假設當前查詢的範圍為 [left, right],mid = (left+right)/2。如果 mid 為偶數,則說明 mid 前面有偶數個數,例如 mid = 2,則 mid 前面有 2 個數(下標為 0, 1);如果 mid 為奇數,則說明 mid 前面有奇數個數。

如果 mid 為偶數,則 mid 前面有偶數個數,我們判斷 nums[mid] 和 nums[mid+1] 是否相等。

如果 mid 為奇數,則 mid 前面有奇數個數,我們同樣判斷 nums[mid] 和 nums[mid+1] 是否相等。

總結一下:

如果 mid 為奇數:

**如下:

class solution {

public:

int singlenonduplicate(vector& nums) {

int left = 0;

int right = nums.size()-1;

while(left<=right){

int mid = left+(right-left)/2;

if(mid%2==0 && mid+1solution/python3-qing-xi-si-lu-yong-shi-ji-bai-97nei-cun-ji/

23 刪除有序陣列中的元素,陣列仍然有序 陣列

刪除乙個有序陣列的乙個元素,採用兩個陣列實現 實現 2017年6月19日16 16 31 功能 刪除陣列中乙個資料之後陣列依然有序 include stdio.h define m 9 int main int b m 1 int i,j,num bool flag printf 請輸入將要刪除的資...

LeetCode 陣列 刪除有序陣列重複元素

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1,2。採用...

LeetCode 陣列 刪除有序陣列重複元素

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1,2。採用...