ในปัญหานี้ เราได้รับสตริงที่แสดงถึงจำนวนมาก และเสียงคำรามจำนวนเต็ม k แสดงถึงจำนวนของเบรกพอยต์ งานของเราคือสร้างโปรแกรมที่จะหาค่าเซกเมนต์สูงสุดหลังจากใส่จุดสั่ง L เป็นตัวเลข
ที่นี่ เราต้องหาจำนวนสูงสุดที่สามารถสร้างได้หลังจากใส่ k เบรกพอยต์ในจำนวนที่กำหนดโดยสตริง
ลองมาดูตัวอย่างเพื่อทำความเข้าใจปัญหา
ป้อนข้อมูล − สตริง =“45972”, k =3
ผลผลิต − 97
คำอธิบาย −
All possible number is: 45 9 7 2 4 59 7 2 4 5 97 2 4 5 9 72 From all 97 is the largest number.
เพื่อแก้ปัญหานี้ เราจะใช้หน้าต่างบานเลื่อน ที่นี่ขนาดหน้าต่างจะเท่ากับ (ความยาวของสตริง - k) นั่นคือจำนวนสูงสุดของขนาดนี้ เราจะตรวจสอบจำนวนสูงสุดจากจำนวนที่เป็นไปได้ทั้งหมดของขนาดที่กำหนดโดยใช้เทคนิคหน้าต่างบานเลื่อน
ตัวอย่าง
โปรแกรมเพื่อค้นหาค่าเซ็กเมนต์สูงสุดหลังจากใส่จุดเบรก K เป็นตัวเลข -
#include <bits/stdc++.h> using namespace std; int findMaxSegmentWithKbreaks(string &s, int k) { int window = s.length() - k; int MaxNumber = 0; for (int i=0; i<window; i++) MaxNumber = MaxNumber * 10 + (s[i] - '0'); int slWindow = pow(10, window-1); int value = MaxNumber; for (int i = 1; i <= (s.length() - window); i++) { value = value - (s[i-1]- '0')*slWindow; value = value*10 + (s[i+window-1]- '0'); MaxNumber = max(MaxNumber, value); } return MaxNumber; } int main() { string s = "45972"; int k = 3; cout<<"Maximum segment value after putting "<<k<<" break points in a number = "<<findMaxSegmentWithKbreaks(s, k); return 0; }
ผลลัพธ์
Maximum segment value after putting 3 breakpoints in a number = 97