1. 程式人生 > >LeetCode 第540題 有序數組中的單一元素

LeetCode 第540題 有序數組中的單一元素

註意 一個 輸入 etc leetcode 出現一次 pub amp spa


/*
給定一個只包含整數的有序數組,每個元素都會出現兩次,唯有一個數只會出現一次,找出這個數。
[0,1,1,2,2,5,5]
示例 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)空間復雜度中運行。*/


/*

思路:  用二分法.
mid 為偶數: mid和哪邊元素相同,單個的數就在哪邊.
mid 為奇數: mid和哪邊元素不同,單個的數就在哪邊.
為了簡化代碼,當mid為奇數時,mid--,轉化為偶數.
*/


 1 class Solution540 {
2 3 public int singleNonDuplicate(int[] nums) { 4 int left = 0; 5 int right = nums.length - 1; 6 while (left < right) { 7 8 int mid = (left + right) >> 1; 9 if ((mid & 1) == 1) { 10 --mid; 11 } 12 if (nums[mid] == nums[mid + 1]) { 13
left = mid + 2; 14 } else { 15 right = mid; 16 } 17 } 18 return nums[left]; 19 } 20 }



LeetCode 第540題 有序數組中的單一元素