0% completed
Problem Statement
Given a sorted
integer array nums
in which each element
appears exactly twice
, and only 1 element appears exactly once
, return the single element
that appears only once.
Note: You must solve the problem in O(log n) time and O(1) space.
Examples
-
Example 1:
- Input: nums =
[4,4,6,6,10,11,11]
- Expected Output: 10
- Justification: Here, 10 is the only number that doesn't have a pair.
- Input: nums =
-
Example 2:
- Input: nums =
[1,1,2,3,3,4,4]
- Expected Output: 2
- Justification: 2 is unique as it does not repeat, making it a single element.
- Input: nums =
-
Example 3:
- Input: nums =
[5,7,7,8,8,10,10]
- Expected Output: 5
- Justification: 5 stands out as it's the only element without a duplicate in the sorted array.
- Input: nums =
Solution
To solve this problem, we will use a binary search technique that leverages the sorted nature of the array to efficiently find the single element. The intuition behind our approach is that the unique element causes a shift in the pattern of indices for the repeating elements. Before the single element, the first occurrence of each element is at an even index, and the second occurrence is at an odd index. After the single element, this pattern reverses because the single element takes up only one position, shifting the index of subsequent elements.
This observation allows us to effectively halve the search space at each step by examining the mid-point of our search boundaries and comparing it with its neighbors. If the pattern holds at the midpoint, we know the single element is further to the right; otherwise, it's to the left. This method is not only efficient but also leverages the given conditions to minimize the search space quickly, ensuring we meet the desired logarithmic time complexity.
Step-by-Step Algorithm
-
Initialize Two Pointers: Start by setting
left
to 0 andright
to the last index of the array (nums.length - 1
). -
Begin Binary Search: Enter a loop that continues while
left
is less thanright
. This condition ensures we don't overrun the search space and stops when the single element is isolated. -
Calculate Midpoint: Inside the loop, calculate the midpoint (
mid
) as the average ofleft
andright
. This is the index we'll check to decide which half of the array contains the single element. -
Check Parity of Midpoint Index: Determine if
mid
is even or odd.-
If
mid
is even and the element atmid
is equal to the element atmid + 1
, then the single element must be to the right, so adjustleft
tomid + 2
. -
If
mid
is even and the element atmid
is not equal to the element atmid + 1
, then the single element is on the left side or atmid
, so adjustright
tomid
. -
If
mid
is odd and the element atmid
is equal to the element atmid - 1
, then the single element is to the right, so adjustleft
tomid + 1
. -
If
mid
is odd and the element atmid
is not equal to the element atmid - 1
, then the single element is on the left side or atmid
, so adjustright
tomid
.
-
-
Find the Single Element: The loop terminates when
left
equalsright
. At this point,nums[left]
(ornums[right]
sinceleft == right
) is the single element that does not have a pair in the array.
Algorithm Walkthrough
Let's consider the input: nums = [5,7,7,8,8,10,10]
-
Initialization:
left = 0
right = 6
(array length - 1)
-
First Iteration:
mid = (0 + 6) / 2 = 3
mid
is odd.nums[mid] = 8
,nums[mid - 1] = 7
. Since they are not equal andmid
is odd, setright = mid = 3
.
-
Second Iteration:
left = 0
,right = 3
mid = (0 + 3) / 2 = 1
mid
is odd.nums[mid] = 7
,nums[mid - 1] = 3
. Since they are not equal andmid
is odd, setright = mid = 1
.
-
Third Iteration:
left = 0
,right = 1
mid = (0 + 1) / 2 = 0
mid
is even.nums[mid] = 5
,nums[mid + 1] = 7
. Since they are not equal andmid
is even, setright = mid = 0
.- Loop breaks as
left
is equal toright
.
-
Conclusion:
- At this point,
left = right = 0
, and the single element isnums[left] = 5
.
- At this point,
Code
Complexity Analysis
Time Complexity: O(log n)
The algorithm uses a binary search technique, dividing the search space in half at each step. This results in a logarithmic time complexity, as the number of elements to be examined reduces by half after each iteration.
Space Complexity: O(1)
The space complexity is constant because the algorithm only requires a fixed amount of space regardless of the input size.
.....
.....
.....
Table of Contents
Contents are not accessible
Contents are not accessible
Contents are not accessible
Contents are not accessible
Contents are not accessible