leetcode.array--31. Next Permutation
来源:互联网 发布:诗尼曼怎么样 知乎 编辑:程序博客网 时间:2024/06/05 06:47
题目:31. Next Permutation
问题描述:https://leetcode.com/problems/next-permutation/description/
大致意思呢,是找出已知序列的一个新排列,要求是字典序升序的下一个排列。当该序列不存在时,将已知序列升序排序。例如[1,2,3,4]的下一个排列是[1,2,4,3],[1,3,2]的下一个排列是[2,1,3],[2,3,1]的下一个排列是[3,1,2],[4,3,2,1]的下一个排列是[1,2,3,4]。
其实呢挺好找的,首先我们要找这样一个位置,要求该位置后面有比其更大的元素且该位置要尽可能靠后,因为这个位置呢一定是新序列需要发生改变的起始位置。这一步要O(n)遍历一遍,只要比较相邻两个元素nums[i]和nums[i+1]是不是升序就好,最后一个下标i就是我们要找的位置。这个位置确定之后,找该位置之后大于nums[i]的最小元素minn。然后呢,从下标i直到最后,去除掉minn排序。最后把minn摆在下标i的位置,排好序的部分序列怼在下标i的后面就好了。这样的话排序最耗时,时间复杂度是O(nlogn)。
原题目要求不能分配额外内存,但是又不想写排序,Emmmm...后面再补上吧。
Python:
class Solution(object): def nextPermutation(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ length=len(nums) pos=-1 for i in range(1,length): if nums[i]>nums[i-1]: pos=i-1 if pos==-1: nums.sort() return minn=max(nums)+1 sub=[] sub.append(nums[pos]) for i in range(pos+1,length): sub.append(nums[i]) if nums[i]>nums[pos] and nums[i]<minn: minn=nums[i] sub.sort() sub.remove(minn) nums[pos]=minn nextn=0 for i in range(pos+1,length): nums[i]=sub[nextn] nextn+=1 # print(nums) return
阅读全文
0 0
- leetcode.array--31. Next Permutation
- LeetCode刷题【Array】 Next Permutation
- LeetCode 31.Next Permutation & 33.Search in Rotated Sorted Array
- [LeetCode]31.Next Permutation
- LeetCode --- 31. Next Permutation
- [Leetcode] 31. Next Permutation
- LeetCode 31.Next Permutation
- [leetcode] 31.Next Permutation
- [leetcode] 31. Next Permutation
- *LeetCode 31. Next Permutation
- Leetcode 31. Next Permutation
- leetcode 31. Next Permutation
- 31. Next Permutation LeetCode
- leetcode 31. Next Permutation
- leetcode 31. Next Permutation
- [LeetCode]31. Next Permutation
- [LeetCode]31. Next Permutation
- LeetCode 31. Next Permutation
- POJ 2376 浅谈一类区间覆盖问题的贪心解法
- Some thing about kali linux lite
- Codeforces Round #438 (868B) B Race Against Time
- 数组中的最大矩形(tiger基金的笔试题)
- C语言实验——输入数字星期,输出英文(switch语句)
- leetcode.array--31. Next Permutation
- 工具篇
- Qt 学习之路 2(68):访问网络(4)
- 图论算法之图的概念及存储(一)
- PostGIS学习笔记(一)——空间对象的表达方式
- python 列表中字符串几种操作
- 安装 scrapy
- 牛车
- mysql数据库和表操作