Problem Statement:
You are given a sorted array consisting of only integers where every element appears exactly twice, except for one element which appears exactly once.
Return the single element that appears only once .
Your solution must run in O(log n)
 time and O(1)
 space.
Example 1:
Input: nums = [1,1,2,3,3,4,4,8,8]
Output: 2
Example 2:
Input: nums = [3,3,7,7,10,11,11]
Output: 10
Constraints:
1 <= nums.length <= 10^5
0 <= nums[i] <= 10^5
Solution:
class Solution {
private boolean isSingleEncountered ( int [] nums , int mid ){
//Observation:
// Single element ke pehle humare pairs Even, Odd indices pe rehte
// uske baad Odd, Even indices pe.
//Implementation:
//agar index even hai toh next index wala element bhi same hona
//chaiye to be a pair IFF single element is not encountered.
if (mid % 2 == 0 ){
//If it's true, iska matlab single element encounter ni hua hai,
//hua hota toh Even and ODD wala order maintained rehta.
if (nums[mid] == nums[mid + 1 ]){
return false ;
} else { //ho gaya encounter single element ka
return true ;
}
} else {
if (nums[mid] == nums[mid - 1 ]){
return false ;
} else {
return true ;
}
}
}
public int singleNonDuplicate ( int [] nums ) {
//Search space,i.e, single element kahan pe present ho sakta
int left = 0 ;
int right = nums.length - 1 ;
while (left < right){
int mid = left + (right - left) / 2 ;
if ( isSingleEncountered (nums, mid)){
right = mid;
} else {
left = mid + 1 ;
}
}
return nums[left];
}
}