Untitled
class Solution { public: pair < int , int > countSetBits(int n) { int count = 0,msb = 0; pair < int , int > pq; while (n) { count += n & 1; n >>= 1; msb++; } return {count , msb} ; } int minimizeXor(int num1, int num2) { pair < int , int > num1On = countSetBits(num1); pair < int , int > num2On = countSetBits(num2); int ans = 0, dif = abs(num1On.first - num2On.first); if(num2On.first == num1On.first) { return num1; } else if (num2On.first > num1On.first) { int temp = num1, cnt = 0, loop = max(num2On.second, num1On.second); dif = abs(num1On.first - num2On.first); ans+=num1; for(int i=0;i<31;i++) { if( dif == 0) break; if((temp & (1 << i)) == 0) { dif--; ans+=1<<i; } } } else { int temp = num1, cnt = 0,loop = max(num2On.second, num1On.second); dif = num2On.first; for(int i=30;i>=0;i--) { if(dif == 0)break; if((temp & (1 << i)) > 0) { dif--; ans+=1<<i; } cnt++; } } return ans; } }; //0001 //1100 //0011001 //1001000 //1000001 //1010100 //1000011 //0011 //1011
Leave a Comment