下一个排列
31. 下一个排列
题目描述: 2020/11/09
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
- 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3
→1,3,2
3,2,1
→1,2,3
1,1,5
→1,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
自己的想法:
- 遍历两边,看题解的图片,理解了,哈哈哈哈
- 找到前面最小的和在后面要交换的位置(在比他大的值中排第一个),之后后面要进行反转,为了使得后面的数值排序为最小,这样才可能构成下一个排列
为什么error:
[1,3,2] -- [2,1,3]
[2,3,1]--[3,1,2] -- [3,2,1]
大的都放后面
解题思路:
nums = sorted(nums) ,类似于一个局部变量,并不能改变初始时候的值
感想:
思想没想好,只想到了找到要交换的位置,但交换之后要进行反转没有想到