給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。
示例:
輸入: [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。採用...