跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题不是leetcode题每次移动一个数字排序

题目是这样的:

有一个乱序的长度为n的,元素为1~n的,不重复的数组
每次只能将一个数字移动到数组的最前面
排序,排成从小到大
最少移动次数是多少

这个题就是找规律差不多,找最大和第二大,如果第二大在最大的左面,不动,如果在右面,赶快移到左面(移的晚,需要调整的数字更多,比如[2,1,4,3],尽快将3移动到最左,好了,这个例子也好像不形象。。。),不知道对不对,代码如下:

class solution:
    count = 0
    def backtrace(self, nums):
        n = len(nums)
        if n==1:
            return

        i = nums.index(n)
        j = nums.index(n-1)
        if i>j:
            self.backtrace(nums[:i]+nums[i+1:])
        else:
            self.count += 1
            self.backtrace([nums[j]]+nums[:i]+nums[i+1:j]+nums[j+1:])

# m = int(input())
# res = [int(i) for i in input().split()]
# nums = res[:m]
nums = [3,1,4,5,2,6,7]
a = solution()
a.backtrace(nums)
print(a.count)

好了。

猜你喜欢

转载自blog.csdn.net/mianjiong2855/article/details/107657816