मान लीजिए कि हमारे पास एक संख्या n है, हमें इसके द्विआधारी प्रतिनिधित्व में 1s के लगातार सबसे लंबे समय तक चलने की लंबाई का पता लगाना है।
इसलिए, यदि इनपुट n =312 जैसा है, तो आउटपुट 3 होगा, क्योंकि 312 बाइनरी में 100111000 है और लगातार 3 1s हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रेट :=0, लेन :=0
-
प्रारंभ करने के लिए मैं:=0, जब मैं <32, अद्यतन (मैं 1 से बढ़ाएँ), यह करें:
-
अगर n/2 विषम है, तो
-
(लेन को 1 से बढ़ाएं)
-
-
अन्यथा
-
लेन :=0
-
-
रिट :=अधिकतम रिट और लेन
-
-
वापसी रिट
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें:
स्रोत कोड (सी++) -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(int n) {
int ret = 0;
int len = 0;
for(int i = 0; i < 32; i++){
if((n >> i) & 1){
len++;
}else{
len = 0;
}
ret = max(ret, len);
}
return ret;
}
};
main(){
Solution ob;
cout << ob.solve(312);
} इनपुट
312
आउटपुट
3