【发布时间】:2020-10-16 15:18:31
【问题描述】:
我进行了测试,但有一个问题我仍然无法解决。
给定一个数字数组,每个元素最多允许 K 次交换,并且只允许相邻交换,找到最大的字典顺序。
例如:
Input
[7, 1, 2, 3, 4, 5, 6]
swapTime = 2
Output
[7, 3, 4, 1, 2, 6, 5]
起初我以为是修改后的 BubbleSort,但它不正确,有什么想法吗? 伪代码如下:
void findMaxNum(int num[], int swapTime) {
int table[n];
for(i=0; i<n; ++i)
table[i] = swapTime;
for(i=0; i<n-1; ++i)
for(j=0; j<n-i-1; ++j)
if(table[j]!=0 && num[j]<num[j+1]) {
swap(num[j], num[j+1]);
swap(table[j], table[j+1]);
table[j]--;
table[j+1]--;
}
}
【问题讨论】:
-
数组大小和交换有什么限制?
-
数组大小:1
-
所以
swapTime是每个元素可以移动多少次,而不是交换总数? -
贪婪的方法怎么样?对于您的输出,请尽可能执行在
output[0]中获得最大数字的操作,然后执行在output[1]中获得最大数字的操作,重复整个输出