Single Element in a Sorted Array | Amazon | Microsoft | Leetcode 540

preview_player
Показать описание
In this video, we will see another popular Binary Search Question " Single Element in a Sorted Array".

Problem Name : Single Element in a Sorted Array

Company Tags 😱🤯 : Amazon, D-E-Shaw, Ola Cabs, Codenation, Qualcomm, Microsoft

╔═╦╗╔╦╗╔═╦═╦╦╦╦╗╔═╗
║╚╣║║║╚╣╚╣╔╣╔╣║╚╣═╣
╠╗║╚╝║║╠╗║╚╣║║║║║═╣
╚═╩══╩═╩═╩═╩╝╚╩═╩═╝

Рекомендации по теме
Комментарии
Автор

most underrated channel for dsa keep up doing sir

BiswajitRout-dlry
Автор

thanks sir for providig us this types of explanantion

thakuradarsh
Автор

Thanks a lot for making this look too easy

souravjoshi
Автор

after watching become piece of cake, THANKYOU

priyanshuchaturvedi
Автор

Class solution {
Public int single Non Duplicate (int[]nums){
int s=0 e=nums.length;
While (s<e){
int mid=(s+e)/2;
mid=mid%2!=0?mid-1:mid;
if(nums[mid]!=nums[mid+1]);
e=mid;
}else{
s=mid+1;
}
return nums[s];
}
};

dayashankarlakhotia
Автор

Similar solution but using indexes : Java Solution

class Solution {
public int singleNonDuplicate(int[] nums) {
int n = nums.length;

int s = 0;
int e = n-1;

while(s < e){
int mid = s + (e-s)/2;

boolean odd = false;
boolean even = false;
if((mid % 2) == 1){
odd = true;
}
if( (mid % 2) == 0){
even = true;
}

boolean isNextEqual = false;
if(nums[mid] == nums[mid+1]){
isNextEqual = true;
}

if( (odd && isNextEqual) || (even && ! isNextEqual) ){
e = mid;
}
else if( (odd && ! isNextEqual) || (even && isNextEqual) ){
s = mid+1;
}
}
return nums[s];
}
}

harsh.jain
Автор

I am watching this solution after attempting Amazon SDE Online Assessment

mereRevyoos
Автор

the if else block can be simplified.
public class Solution
{
public int SingleNonDuplicate(int[] nums)
{
/*
#1. elements are in pair, then in ideal case
it will start from even index & end at odd index
#2. for single element, element != nums[prev] && element != nums[next]
*/

int n = nums.Length;
if (n == 1)
return nums[0];
if (nums[0] != nums[1])
return nums[0];
if (nums[^1] != nums[^2])
return nums[^1];

int l = 2;
int r = n - 2;
while (l <= r)
{
int mid = l + (r - l)/2;
if (nums[mid] != nums[mid + 1] && nums[mid] != nums[mid - 1])
return nums[mid];
else if ((mid % 2 == 0 && nums[mid] == nums[mid + 1]) || mid % 2 == 1 && nums[mid] == nums[mid -1])
l = mid + 1;
else
r = mid - 1;
}

return -1;
}
}

vivek.tiwary
Автор

Class solution {
Public int singlesNon Duplicate (int[]nums){
int s=0 e=nums.length;
While (s<e){
int mid=s+(e-s)/2;
||mid%2==1&&nums[mid]==nums [mid-1]));
s=mid+1;
}else {
e=mid;
}
return nums[s];
}
};

dayashankarlakhotia
Автор

Hii can we do this question with map as well?

utkarshnigam
Автор

My solution is also the same but there is little difference. can you please check and tell me if it does make a difference in the performance of the code?

class Solution {
public int singleNonDuplicate(int[] nums) {
int start = 0;
int end = nums.length-1;

while(start < end){
int mid = start + (end-start)/2;

//Check number of elements on the right side
boolean isEven = (end-mid)%2 == 0 ? true : false;

if(nums[mid] == nums[mid+1]){

if(isEven){
start = mid+2;
}
else{
end = mid-1;
}

}
else{

if(isEven){
if(nums[mid-1] == nums[mid]){
end = mid-2;
}
else{
return nums[mid];
}
}
else{
start = mid+1;
}

}
}

return nums[start];
}
}

satyasanjay