สมมติว่าเรามีตัวเลข n เราต้องหาความยาวของ 1s ที่ต่อเนื่องกันยาวนานที่สุดในการแทนค่าไบนารี
ดังนั้น หากอินพุตเป็น n =312 เอาต์พุตจะเป็น 3 เนื่องจาก 312 เป็น 100111000 ในรูปแบบไบนารี และมี 1 วินาทีติดต่อกัน 3 ครั้ง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ret :=0, len :=0
-
สำหรับการเริ่มต้น i :=0 เมื่อฉัน <32 อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ:
-
ถ้า n/2 เป็นเลขคี่ แล้ว
-
(เพิ่มเลน 1)
-
-
มิฉะนั้น
-
เลน :=0
-
-
ret :=สูงสุดของ ret และ len
-
-
รีเทิร์น
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
ซอร์สโค้ด (C++) -
ตัวอย่าง
#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