สมมติว่าเรามีตัวเลข 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