ในปัญหาที่กำหนด เราจำเป็นต้องค้นหาค่าของตัวเลขซึ่งมีบิตที่ตั้งไว้ทั้งหมดระหว่างช่วง L, R ที่กำหนด ตัวอย่างเช่น -
Input: L = 1, R = 5 Output: 62 Explanation: representation of given L and R in binary form is 0..0111110 Input: L = 1, R = 4 Output: 30 Explanation: representation of given L and R in binary form is 0..11110
แนวทางในการหาทางออก
ในปัญหาที่กำหนด เราจะพูดถึงสองแนวทาง คือ Brute Force และ Efficient Approach
กำลังดุร้าย
ในแนวทางนี้ เราจะเพียงแค่ข้ามผ่านช่วงที่กำหนดและเพิ่มกำลังทั้งหมดของ 2 ในช่วงที่กำหนด และนั่นจะเป็นคำตอบของเรา
ตัวอย่าง
#include<bits/stdc++.h> using namespace std; int main() { int L = 1, R = 3; // the given range int ans = 0; // our answer for(int i = L; i <= R; i++) // traversing through the whole range ans += pow(2, i); // adding values to the answer. cout << ans << "\n"; }
ผลลัพธ์
14
ในแนวทางนี้ เราแค่ข้ามผ่านช่วงและเพิ่มกำลังของตัวเลข 2 ตัวในช่วง โปรแกรมนี้มีความซับซ้อนด้านเวลา O(N) โดยที่ N คือขนาดของช่วงของเรา แต่เราสามารถปรับปรุงความซับซ้อนของเวลาเพิ่มเติมได้โดยใช้ความรู้เกี่ยวกับบิตในคำถามที่กำหนด
แนวทางที่มีประสิทธิภาพ
ในแนวทางนี้ เราจะสร้างสูตรง่ายๆ ที่จะคำนวณคำตอบให้เรา
ตัวอย่าง
#include<bits/stdc++.h> using namespace std; int main() { int L = 1, R = 3; // the given range int ans = 0; // our answer for(int i = L; i <= R; i++) // traversing through the whole range ans += pow(2, i); // adding values to the answer. cout << ans << "\n"; }
ผลลัพธ์
14
ในแนวทางนี้ เราสร้างสูตรสำหรับคำนวณคำตอบ
คำอธิบายของโค้ดด้านบน
อย่างที่คุณทราบ เราต้องคำนวณตัวเลขด้วยเซตบิตในช่วงที่กำหนด ดังนั้นในวิธีนี้ เราจะพบตัวเลขที่มีบิตทั้งหมดตั้งไว้ที่ R จาก 0 จากนั้นเราต้องลบตัวเลขที่มีบิตทั้งหมด ตั้งค่าจาก 1 ถึง (L-1) และด้วยเหตุนี้เราจึงกำหนดข้อสังเกตนี้ ความซับซ้อนของเวลาโดยรวมของรหัสที่กำหนดคือ O(1) ซึ่งเป็นความซับซ้อนของเวลาคงที่ซึ่งหมายความว่าเราสามารถคำนวณคำตอบใด ๆ ในเวลาคงที่ได้
บทสรุป
บทความนี้จะสร้างโปรแกรมสำหรับ “Number with set bits only between L-th and R-the index” เรายังได้เรียนรู้โปรแกรม C++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ ( Normal และ มีประสิทธิภาพ ) โดยที่เราแก้ไขปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์