Great work again Striver! I wouldnt have ever tried learning DSA if i had never ran onto your channel. It is a request that you please make the string playlist next whenever you have free time(ik its hard to find time alongside doing a fulltime job,but you still do so much for us so thanks a lot).
C++ code with comments for better understanding class Solution { public: vector singleNumber(vector& nums) { // brute force using map // optimised using bit manipulation bucket // approach : we know that all duos xor will be 0 and the unique 2 elements xor will contain // nothing but a number which contain bits which are not same in both long long numXor=0; for(auto it:nums)numXor^=it; // now we need to distinguish both the numbers // and xor contains all the bits which are not same in both , we just need one different bit // taking the rightmost one is fine long long rightBit= numXor ^ (numXor &(numXor-1)); // now take 2 bucket integer which store numbers based on this rightBit int a=0,b=0; for(auto it:nums){ // if right bit is set if(it&rightBit)a^=it; else b^=it; } return {a,b}; } };
The best explanation ever. The previous one's last solution blew me away... Amazing Striver, done with Bit manipulation today. Will start greedy from Monday. Hope you sgtart the string and stacks queues playlist soon.
here is my python3 code for the given problem 👇 nums=list(map(int,input("Enter the list : ").split(" "))) xor=0 for ele in nums: xor=xor^ele bitmask=xor&(xor-1) bitmask=bitmask^xor num1=0 num2=0 for ele in nums: if bitmask&ele: num1=num1^ele else: num2=num1^ele print(num1,"and",num2,"are the unique numbers out there in the list.")
There is an mistake @19:04 it's not rightMost = (xor & (xor - 1)) & (xor); => rightMost = (xor & (xor - 1)) ^ (xor); or rightMost = xor & -xor is efficent way
There is a small mistake @19:04
rightmost = (xor & (xor - 1)) ^ xor is the correct formula.
Very great explanation! 🔥🙌
Alternatively u can use xor & -xor
@@shubhrajit2117 after using this formula did we still need to take XOR as long datatype?? or it will work in int
@@AkOp-bf9vm Yes, you need to use long because when xor is -2^31 then -xor=2^31 which is more than INT_MAX
The previous way when you code at the end of the video was great. Please continue like that .
It's ok. He wants to make it language independent ig.
@@movieskingdom1748 and he might not get c++ viewers also ,bcz most of the time people figure out approach but might face difficulty in coding
1:20: using hash map (brute force)
6:05: bitwise approach (optimised)
18:05: code for optimised approach
The clearest explanation I've ever seen for 260 in bit manipulation. Thank you!
Great work again Striver! I wouldnt have ever tried learning DSA if i had never ran onto your channel. It is a request that you please make the string playlist next whenever you have free time(ik its hard to find time alongside doing a fulltime job,but you still do so much for us so thanks a lot).
So nice of you Striver... THANK you so much for this type of content... Even words wouldn't be enough for that. Thanks a million.
C++ code with comments for better understanding
class Solution {
public:
vector singleNumber(vector& nums) {
// brute force using map
// optimised using bit manipulation bucket
// approach : we know that all duos xor will be 0 and the unique 2 elements xor will contain
// nothing but a number which contain bits which are not same in both
long long numXor=0;
for(auto it:nums)numXor^=it;
// now we need to distinguish both the numbers
// and xor contains all the bits which are not same in both , we just need one different bit
// taking the rightmost one is fine
long long rightBit= numXor ^ (numXor &(numXor-1));
// now take 2 bucket integer which store numbers based on this rightBit
int a=0,b=0;
for(auto it:nums){
// if right bit is set
if(it&rightBit)a^=it;
else b^=it;
}
return {a,b};
}
};
finally felt like old videos of striver are back
class Solution {
public:
vector singleNumber(vector& nums) {
long num =0;
for(int i=0;i
The best explanation ever. The previous one's last solution blew me away... Amazing Striver, done with Bit manipulation today. Will start greedy from Monday. Hope you sgtart the string and stacks queues playlist soon.
here is my python3 code for the given problem 👇
nums=list(map(int,input("Enter the list : ").split(" ")))
xor=0
for ele in nums:
xor=xor^ele
bitmask=xor&(xor-1)
bitmask=bitmask^xor
num1=0
num2=0
for ele in nums:
if bitmask&ele:
num1=num1^ele
else:
num2=num1^ele
print(num1,"and",num2,"are the unique numbers out there in the list.")
vector singleNumber(vector& nums) {
long xorr = 0; //Taking xorr as long for the case of INT_MIN in nums[i]
for(auto &it : nums)
xorr ^= it;
int rightMostBitTurnedOne = xorr & (-xorr);
int b1 = 0, b2 = 0; //b1 --> 1st bit is set || b2 --> 1st bit is 0
for(auto &it : nums) {
if(it & rightMostBitTurnedOne)
b1 ^= it;
else
b2 ^= it;
}
return {b1, b2};
}
but in the video he said to we need to xor it with intial value to get right most set bit
@@yaswanthmitta8983 yeah we have to take as rightMostBitTurnedOne=( (rightMostBitTurnedOne & rightMostBitTurnedOne-1)^rightMostBitTurnedOne )
at 13:00 by first bit he meant bit at index 1 from back (If any one was confused here)
Understood........Thank You So Much for this wonderful video.............🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻
U R the king striver !!
Legendary Explanation!!
Keep code at last as in your old videos ❤🎉
yes that was very ncessary for us please striver sir
There is an mistake @19:04
it's not
rightMost = (xor & (xor - 1)) & (xor); => rightMost = (xor & (xor - 1)) ^ (xor);
or
rightMost = xor & -xor is efficent way
(xor & (xor - 1)) ^ xor correction in formula
mind blowing logic
UNDERSTOOD Thank you so much sir
Extremely helpful video. 5:54 just a small correction, there are two repeating numbers, hence m = n/2+2
m = (n-2/2) +2 which is equal to n/2 +1
understood
Thank you 😊
Awesome!
Understood!
what if we get 4,8 both as unique no. appearing ones only , than they will go to the same bucket ...4^8 in bucket 2
Then rightmost will be 3rd bit(0-based indexing) means differentiating bit will be changed
Understood
thank you Bhaiya
This is goldddd
thanks !
understood
🤩
Thank u sir
understood.
why are people asking for code?? It is literally the same as the pseudocode he has written.
XOR them as you get (naa hindi word ), ❤❤
for rightmost xor&(-xor) will do I think
19:06 there is a writing mistake the formula is rightmost= ((original-numb & (original-numb-1)^original-numb)
How can we think off such solutions .
There is only one method we have to learn this solution for this particular question ig.
9:40
public int singleNumber (int[]nums){
int xor=Arrays.stream(nums).reduce((a,b)->a^b).getAsInt();
int mask=xor& ~(xor-1);
int[]ans=new int[2];
for(int num:nums){
if((num&mask)>0)
ans[0]^=num;
else
ans[1]^=num;
}
return ans;
}
🎉❤
Can someone explain me how 14 and 4 got seperated and how we are checking rightmost bit pls do explain
we dont seperate 14 and 4 .xorr = xorr^arr[i] 14 and 4 gets xor , and (xorr&xorr-1)^xorr
Us
Once Again
Make playlist or videos for Competitive programming because I have completed your dsa series 😊
once again, the world doesn't revolve around you bro
1st