欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-15 21:10:06
题目是这样的:有一个乱序的长度为n的,元素为1~n的,不重复的数组每次只能将一个数字移动到数组的最前面最少移动次数是多少这个题就是找规律差不多,找最大和第二大,如果第二大在最大的左面,不动,如果在右面,赶快移到左面(移的晚,需要调整的数字更多,比如[2,1,4,3],尽快将3移动到最左,好了,这个例子也好像不形象。。。),不知道对不对,代码如下:class solution: count = 0 def backtrace(self, nums): n = len...

题目是这样的:

有一个乱序的长度为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)

好了。

本文地址:https://blog.csdn.net/mianjiong2855/article/details/107657816