下一个排列

31. 下一个排列

题目描述: 2020/11/09

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须原地修改,只允许使用额外常数空间。

  • 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
    1,2,31,3,2
    3,2,11,2,3
    1,1,51,5,1
import numpy as np 

class Solution:
    def kClosest(self, points: List[List[int]], K: int) -> List[List[int]]:
        L = len(points)
        D = np.ones(L) * 10000 # points.length <= 10000
        index1 = np.empty(L)
        out = [[0 for i in range(2)] for i in range(K)]
        for i in range(len(points)):
            D[i] = points[i][0] ** 2 + points[i][1] ** 2
        index1 = np.argsort(D)
        for i in range(K):
            out[i] = points[index1[i]]
        return out

自己的想法:

  1. 遍历两边,看题解的图片,理解了,哈哈哈哈
  2. 找到前面最小的和在后面要交换的位置(在比他大的值中排第一个),之后后面要进行反转,为了使得后面的数值排序为最小,这样才可能构成下一个排列

为什么error:

  1. [1,3,2] -- [2,1,3]

  2. [2,3,1]--[3,1,2] -- [3,2,1]

    大的都放后面

解题思路:

python for 逆序

列表排序

sorted是返回新的列表

nums = sorted(nums) ,类似于一个局部变量,并不能改变初始时候的值

官方题解

fig1

感想:

思想没想好,只想到了找到要交换的位置,但交换之后要进行反转没有想到

posted @ 2021-04-09 10:21  Tonka  阅读(46)  评论(0)    收藏  举报