在 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

更新於:2020-06-03

203 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告