题目大意:数组或列表存储小于10的非负整数,经过K次数组相邻位置元素变换(必须是K次),求连城的数字的最大值
如 int array ={0,1,3,2}经过K=1变换,最大值为1032;经过K=2次变换代表的最大值3012;
输入:
第一行T,表示输入的测试用例次数;
第二行K,表示经过的变换次数;
第三行N,表示数组的长度;
第四行是输入数组里的值,以空格间隔;
后面是K和N的以及数组数字输入的交替。
输出:交换后的数组串
例:
输入:
4
2
5
4 2 1 3 5
3
5
4 2 1 3 5
4
5
4 2 1 3 5
5
5
4 2 1 3 5
输出:
4 3 2 1 5
4 5 2 1 3
5 4 2 1 3
5 4 2 3 1
解题思路:
从列表的最左侧开始遍历,遍历K此,首先判断第一位是否是0至第K为数字的最大值,是的话就不变,移植下一位。如果不是最大值,找出最大值的位置,减去当前判断数字的位置,c =(最大值的位置 - 当前判断数字的位置),K=K-c为剩下交换的次数,然后从最大位置逐个与前面的数字进行交换,直到最大值到达要确定变换的位置。
可能讲得不是很清楚,看代码会更清晰一些吧,下面直接上代码。
# -*- coding:utf-8 -*-
# @Author:zgd
# @time:2019/4/21
# @File:hehe.py
##是否是最大值
def isbig(i, array, K):
new_array = array[0:

该博客探讨了一个算法问题:如何找到一个包含小于10的非负整数的数组,经过K次相邻元素变换后能形成的最大数字。通过遍历数组并计算每次变换,确定如何移动最大值以最大化结果数字。解题策略包括比较首位是否为最大值以及如何调整剩余变换次数以优化顺序。
最低0.47元/天 解锁文章
1502

被折叠的 条评论
为什么被折叠?



