Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาตัวเลขที่มีเซตบิตระหว่างดัชนี L-th และ R-th โดยใช้ C++


ในปัญหาที่กำหนด เราจำเป็นต้องค้นหาค่าของตัวเลขซึ่งมีบิตที่ตั้งไว้ทั้งหมดระหว่างช่วง 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 และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์