Untitled

 avatar
unknown
plain_text
25 days ago
1.5 kB
2
Indexable
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