मान लीजिए कि हमारे पास एक संख्या 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