#include <vector> class CloseNumber { public: vector<int> getCloseNumber(int x) { // write code here int c0=0, c1=0; int c= x; //find the first "01" while((c &1) == 0 && c!=0){ c = c>>1; ++c0; } while (c&1) { c= c>>1; ++c1; } int p = c0+c1; if(p == 31 || p ==0){ return {-1,-1}; } std::cout<< c0 <<" - " << c1<<std::endl; //next larger int next_larger = x | ( 1<< p); next_larger &= ~( (1<< p) -1 ) ; next_larger |= ((1<< (c1-1)) -1); //find the firt "10" c0=0; c1=0; c=x; while (c&1) { ++c0; c = c>>1; } while ((c&1) ==0 && c!=0){ ++c1; c = c>>1; } p = c0+c1; if(p == 31 || p ==0){ return {-1,-1}; } int next_smaller = x & (~0 <<(p+1)); next_smaller |= ((1 << (c0+1) ) -1) << (c1-1); return {next_smaller, next_larger}; } };