DEV Community

Prashant Mishra
Prashant Mishra

Posted on • Originally published at youtube.com

Single Number 2

Problem
HashMap approach by keeping count:

//tc : O(nlogn) : n for traversing the nums array and logn for worst case search  //HashMap uses(Red-Black Tree) when collisions become significant, reducing the worst-case time complexity to O(log n). //sc: O(n/3) +1 class Solution { public int singleNumber(int[] nums) { HashMap<Integer,Integer> map = new HashMap<>(); for(int i : nums){ map.put(i,map.getOrDefault(i,0)+1); } for(int i =0;i<nums.length;i++){ if(map.get(nums[i]) ==1) return nums[i]; } return -1; } } 
Enter fullscreen mode Exit fullscreen mode

Bit Manipulation approach 1:
Let take example of nums[] = [2,2,3,2]; n = 4.
2 is appearing 3times and 3 is appearing 1s , hence answer is 3.

index 2 index 1 index 0
0 1 0
0 1 0
0 1 1
0 1 0

if we keep track of bit value at each index for each value that appears in nums[] then we can get the idea that if a number appears 3 times then where ever it's bit value is set to 1 that column will have (no of counts of 1)%3 = 0, if ever we get (no of counts of 1) %3 = 1 it will mean that this column(or index bit ) is set for the ans(3) we are looking for.

for the first bit (column : index 0)
(no of counts of 1) %3 = 1 -> since row three has 1 at bit index 0 (Means ans has 0th bit set)
for the second bit (column: index 1)
(no of counts of 1) %3 = 1 (Means ans has 1st bit set )
for the third bit (column: index 2)
(no of counts of 1) %3 = 0 (Means ans has 3rd bit as unset)

ans = 011 (0th and 1st bit are set) = 3(base 10)

this is what we are trying to achieve with the below code as well

//tc: O(n*32) //sc: O(1) class Solution { public int singleNumber(int[] nums) { int ans =0; //o(32) for(int bitIndex = 0;bitIndex<32;bitIndex++){ //since there are max 32 bits possible for the given integer value int count =0; //o(n) //count no of 1s in ith bit for all the nums[] for(int i = 0;i<nums.length;i++){ if(((nums[i]>>bitIndex ) & 1) ==1){ count++; } } if(count%3==1){ ans = ans | (1<<bitIndex); } } return ans; } } 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)