একটি ধনাত্মক পূর্ণসংখ্যা n দেওয়া আছে। আমরা নিচের অপারেশনগুলো করতে পারি:
- যদি
nসম হয়,n-কেn/2দিয়ে রিপ্লেস করুন। - যদি
nবিজোড় হয়,n-কেn+1বাn-1দিয়ে রিপ্লেস করতে পারেন।
n-কে ১ করার জন্য ন্যূনতম কতবার রিপ্লেসমেন্ট লাগবে তা বের করতে হবে। উদাহরণ: ৭ হলে উত্তর ৪, কারণ 7 → 8 → 4 → 2 → 1 বা 7 → 6 → 3 → 2 → 1।
সমাধানের ধাপগুলো:
ret := 0, n := xn > 1रहने পর্যন্ত:- যদি
nসম হয়,n >>= 1। - অন্যथा যদি
nবিজোড় হয়:- যদি
n == 3বা(n>>1) & 1 == 0(অর্থাৎn/2সম), তবেn--, অন্যথায়n++।
- যদি
ret++
- যদি
retফেরত দিন।
উদাহরণ (C++)
#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution { public: int bitCount(int x){ int ret = 0; while(x){ ret++; x >>= 1; } return ret; } int integerReplacement(int x) { int ret = 0; lli n = x; while(n > 1){ if(n % 2 == 0){ n >>= 1; } else if(n & 1){ if(n == 3 || (((n >> 1) & 1 )== 0)){ n--; } else { n++; } } ret++; } return ret; } }; main(){ Solution ob; cout << (ob.integerReplacement(7)); }ইনপুট
7
আউটপুট
4