在 C++ 中,在数字中插入 k 个断点后最大段的值
在这个问题中,我们得到一个表示大数的字符串和一个整数 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
广告