1. 程式人生 > 其它 >LeetCode刷題——540. 有序陣列中的單一元素(二分)

LeetCode刷題——540. 有序陣列中的單一元素(二分)

題目描述

給你一個僅由整陣列成的有序陣列,其中每個元素都會出現兩次,唯有一個數只會出現一次。

請你找出並返回只出現一次的那個數。

你設計的解決方案必須滿足 O(log n) 時間複雜度和 O(1) 空間複雜度。


示例 1:

輸入: nums = [1,1,2,3,3,4,4,8,8]
輸出: 2

示例 2:

輸入: nums = [3,3,7,7,10,11,11]
輸出: 10


提示:

1 <= nums.length <= 105
0 <= nums[i] <= 105

Java程式碼

 1 class Solution {
 2     public int singleNonDuplicate(int
[] nums) { 3 // 二分 4 int n = nums.length; 5 int l = 0, r = n - 1; 6 while (l < r) { 7 int mid = (r - l) / 2 + l; 8 // 若 mid 為偶數,則mid ^ 1 = mid + 1 9 // 若 mid 為奇數, 則mid ^ 1 = mid - 1; 10 if (nums[mid] == nums[mid ^ 1]) {
11 l = mid + 1; 12 } else { 13 r = mid; 14 } 15 } 16 return nums[l]; 17 } 18 }

原題連結:https://leetcode-cn.com/problems/single-element-in-a-sorted-array/