通过在C ++中最多进行K次交换来查找最大数目
在这个问题中,我们得到两个整数值n和k。我们的任务是通过最多进行K次交换来找到最大数目。
问题描述: 在这里,我们需要计算最大数目的数字,该数字是在交换最多k位数字后创建的。
让我们举个例子来了解这个问题,
输入: n=538k=1
输出: 835
解释:
我们将交换8和5。
解决方法
为了解决这个问题,我们需要将数字k交换一次,并检查from的数字是否最大。
我们需要找到数字的最大位数,然后在第一个索引处交换元素。以此类推,对于数字的前k个索引。
用来说明我们解决方案工作原理的程序
示例
#include <bits/stdc++.h> using namespace std; void calcMaxNumAfterSwap(string number, int k, string& maxString, int n){ if (k == 0) return; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (number[i] < number[j]) { swap(number[i], number[j]); if (number.compare(maxString) > 0) maxString = number; calcMaxNumAfterSwap(number, k - 1, maxString, n); swap(number[i], number[j]); } } } } int main(){ string str = "15263"; int k = 3; int size = str.length(); string maxString = str; calcMaxNumAfterSwap(str, k, maxString, size); cout<<"之后的最大数量 "<<k<<" swaps is "<<maxString; return 0; }输出结果
之后的最大数量 3 swaps is 65321