Missing Number LeetCode, from the given array we have to find the missing numbers and we were asked to solve this with O(1) extra space complexity i.e constant space and O(n) runtime complexity. This means that we should not use extra space, it should be constant.
Input: [0,3,1,4]
Output: 2
Input: [2,1,4,6,7,5,9,0,2]
Output: 8
Description
Some important points to consider
- The array is NOT sorted
- One number is missing
- No extra memory, constant space
- We have to use only one loop, a single iteration
Solution Explanation
So we have an array of numbers of length n and we have to find the missing number, the problem is very easy if the array was sorted but it isn’t.
This can be easily solved using XOR, so basically, XOR deals with bit manipulation at the binary level. One thing you need to know is XOR of the same numbers cancel each other if you are still confused test some numbers using this XOR calculator
Now we use a loop where i=0 to i<length of array
and
missing = missing ^ i ^ a[i-1]
where missing=0 and a[] is our array and the loop goes like this
Input: [0,3,1,4]
for(i=1;i<=4;i++)
missing = 0^1^0 = 1
missing = 1^2^3 = 0
missing = 0^3^1 = 2
missing = 2^4^4 = 2
Code for Missing Number LeetCode C++
class Solution {
public:
int missingNumber(vector<int>& nums) {
int n = nums.size();
int x = 0;
for(int i=1;i<=n;i++)
x = x ^ i ^ nums[i-1];
return x;
}
};
Conclusion
Link to Problem Missing Number LeetCode, Though it is a bit difficult in the beginning to understand XOR, it is very useful when dealing with similar problems like finding missing numbers. This post is part of my #30DaysChallenge to write a blog post every day on what I learn.
Happy Coding~ Abhiram Reddy