数组的合并和升序排列_leetcode No.31 下一个排列
题目链接:
下一个排列 - 力扣(LeetCode)leetcode-cn.com
题目描述:
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3
→ 1,3,2
3,2,1
→ 1,2,3
1,1,5
→ 1,5,1
解题思路:
最直接的想法是暴力法,找出由给定数组的元素形成的列表的每个可能的排列,并找出比给定的排列更大的排列。但是时间复杂度是
首先,如果是一个降序数组,没有可能有下一个更大的排列,直接反转变成升序数组就好。
然后,我们再来看看一般情形,假设数组名为
而要想找到下一个排列,我们可以从右往左来找到第一对满足
现在在索引
可能你想到直接排序就好了嘛,但其实还有更简单的方法。因为在从右侧扫描数字时,我们只是持续递减索引直到我们找到
代码如下:
class Solution {public:void nextPermutation(vector<int>& nums) {int n = nums.size(), k, l;for (k = n - 2; k >= 0; k--) {if (nums[k] < nums[k + 1]) {break;}}if(k < 0) {reverse(nums.begin(), nums.end());}else {for (l = n - 1; l > k; l--) {if (nums[l] > nums[k]) {break;}}swap(nums[k], nums[l]);reverse(nums.begin()+k+1, nums.end());}}
};
其实 C++ 里面有库函数 next_permutation 可以直接帮我们获取下一个排列。。。
如果有任何疑问,欢迎提出。如果有更好的解法,也欢迎告知。
数组的合并和升序排列_leetcode No.31 下一个排列相关推荐
- Java实现 LeetCode 31下一个排列
31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...
- 72.编辑距离105.前序中序遍历序列构造二叉树151.翻转字符串里的单词104.二叉树的最大深度76.最小覆盖子串110.平衡二叉树31.下一个排列
72.编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 .你可以对一个单词进行如下三种操作:插入一个字符,删除一个字符,替换一个字符. ...
- LeetCode每日一题--31. 下一个排列(数学)
题目:跳转至 31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原 ...
- 【LeetCode】【HOT】31. 下一个排列
[LeetCode][HOT]31. 下一个排列 文章目录 [LeetCode][HOT]31. 下一个排列 package hot;import java.util.Arrays;public cl ...
- LeetCode 热题 HOT 100 -------31. 下一个排列(数组,数学问题)128. 最长连续序列(数组) 11. 盛最多水的容器(数组) 621. 任务调度器 (数组)
dsadas /**思路:找下一个排列,并且尽可能小,所以我们应该找一序列中从左边开始的"较小值"与"较大值"交换,但是为了尽可能小应该满足: 1." ...
- LeetCode.31 下一个排列
题目描述 实现获取下一个排列的算法,算法需要将给定的数组,重新排列成下一个更大的排列(即组合出下一个更大的数字). 如果不存在下一个更大的排列,则将数字重新排列成最小的排列. 题目思路 我们可以使用如 ...
- leetcode —— 31. 下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...
- LeetCode 31. 下一个排列 Next Permutation
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...
- Leetcode 31. 下一个排列 (每日一题 20210831)
实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数).如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列).必须 原地 ...
最新文章
- Python,OpenCV使用KNN来构建手写数字及字母识别OCR
- 报名 | 三年拿斯坦福CS博士的创业者:AI如何赋能金融
- 用 JS 做一个数独游戏(二)
- msm8953+android8.1接听电话时声音由默认听筒输出改为外放输出
- UA MATH564 概率分布总结
- 【洛谷 P4934】 礼物 (位运算+DP)
- 以女朋友为例讲解 TCP/IP 三次握手与四次挥手
- ASP VBScript 函数速查表
- Spark将数据写入Mysql
- 力扣-202 快乐数
- 关于限制水晶报表的导出格式
- ps--光照+光晕+模糊
- (开源)带有笔顺的字体
- 阿里云物联网配置网络流程
- SpringMVC----ajax跨域请求
- OKR使用什么工具落地?
- 如何使用BBP公式直接计算π的第n位
- unity之Matrix4x4.TRS(Vector3 pos, Quaternion q, Vector3 s)的原理
- 学习成长之路 (初章 三个月建成微信 小程序商城、ArcEngine C# GIS开发入门)
- Python王者荣耀皮肤批量下载