leetcode第31题

该篇博客讨论了如何使用Python实现数组的下一个排列,特别关注了在不额外记录中间变量middle的情况下优化空间效率。作者通过分析算法逻辑,指出在某些情况下(如数组自然有序时),直接用left+1替换middle可能会导致错误,并举例说明了这种错误如何产生以及其后果。
摘要由CSDN通过智能技术生成
# coding=utf-8
# This is a sample Python script.
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
# Definition for singly-linked list.
class Solution(object):
    def nextPermutation(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        1.left=0 right=0 middle=0
        2.for i in range(len(nums))[::-1]:
            if :升序
                pass
            else:
                left=i
                middle=i+1
                break
        3.for m in range(left,len(nums)):
            if nums[m]>nums[i]:
                right=m
                break
            else:
                pass
        4.exchange [left],[right]
        5.倒置middle后边的
        """
        left = 0
        right = 0
        middle = 0
        for i in range(len(nums)-1)[::-1]:
            if nums[i]>=nums[i+1]:
                pass
            else :
                left = i
                middle = i + 1
                break
        for m in range(middle, len(nums))[::-1]:
            if nums[m]>nums[left]:
                right=m
                break
            else:
                pass
        print left,middle,right
        temp=nums[left]
        nums[left]=nums[right]
        nums[right]=temp
        for n in range(middle,(middle+len(nums))/2):
            temps=nums[n]
            k=middle + len(nums) - 1 - n
            nums[n]=nums[k]
            nums[k]=temps

这里怎么说,后来为了空间开销不想记middle,然后发现直接用left+1替代middle当数组处于自然有序的时候(比如[3,2,1]),left+1=1,然后排序会漏掉nums[0]真是错错得对了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值