跟着专注于计算机视觉的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)

好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值