当前位置:网站首页>leetcode 31. 下一个排列(实现next_permutation 函数)
leetcode 31. 下一个排列(实现next_permutation 函数)
2022-08-08 15:38:00 【_刘小雨】
作者简介:C/C++ 、Golang 领域耕耘者,创作者
个人主页:作者主页
活动地址:CSDN21天学习挑战赛
题目来源: leetcode官网
如果感觉博主的文章还不错的话,还请关注 、点赞 、收藏🧡三连支持一下博主哦~~~
题目描述
整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。
例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。
整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。
例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。
类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。
而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。
给你一个整数数组 nums ,找出 nums 的下一个排列。
必须 原地 修改,只允许使用额外常数空间。
示例1:
输入:nums = [1,2,3]
输出:[1,3,2]
示例2:
输入:nums = [3,2,1]
输出:[1,2,3]
示例 3:
输入:nums = [1,1,5]
输出:[1,5,1]
🧡 算法分析
此题是术语脑筋转弯题
算法步骤:
- 需要从后面找到第一次不是降序的数字位置
- 交换比找的数字大一点的,然后将后面的序列按照升序排列,这就是下一个排列数组
- 如果找到不到第一次降序的数字,则说明这个序列是最大的数字,将这个序列翻转一下即可为最小的数字
代码实现
class Solution {
public:
void nextPermutation(vector<int>& nums) {
// 实现 next_permutation 函数
// next_permutation(nums.begin(), nums.end());
// 找到降序的位置哪一位
int t = nums.size() - 1;
while(t > 0 && nums[t] <= nums[t - 1]) t -- ;
//cout << t << endl;
if(t == 0)
{
reverse(nums.begin(), nums.end());
}
else
{
int k = t;
while(k < nums.size() && nums[t - 1] < nums[k]) k ++;
//cout << k << endl;
swap(nums[k- 1], nums[t - 1]);
// 交换元素后,将后面的数组,升序排列即可
reverse(nums.begin() + t, nums.end());
}
}
};
执行结果:
时间复杂度分析
其中遍历一次, 时间复杂度为O(n)
如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
🧡 收藏,你的青睐是我努力的方向!
️ 评论,你的意见是我进步的财富!
边栏推荐
- 本机Redis Desktop Manager连不上vmware的redis
- 大佬们,sqlserver-cdc任务报错这个,大家遇到过吗Caused by: org.apac
- 分布式架构服务调用
- 5G NR RRC连接控制
- What is low-code development?Is everyone really optimistic about low-code development?
- 保险,一生必备
- 761. 特殊的二进制序列 : 经典构造题
- Introduction to Recurrent Neural Network (RNN)
- Zhaoqi Technology Innovation and Entrepreneurship Event Event Platform, Investment and Financing Matchmaking, Online Live Roadshow
- JS-BOM-factorial calculation
猜你喜欢
Create a 2D array
程序发生run time error原因及解决方案
干货:从零设计高并发架构
web-sql注入
Redis RDB分析系统
Elegantly detect and update web applications in real time
【kali-权限提升】(4.2.5)社会工程学工具包:PowerShell攻击向量(防报毒)
[Unity entry plan] Unity instance - how to protect data members through encapsulation in C#
IBM3650M4的ESXI主机报警“其他主机硬件对象的状态”
分布式架构服务调用
随机推荐
JS-BOM-Name Converter - Input Name Position Reversed
Common regularization methods in deep learning (Regularization) and detailed explanation of WeightDecay parameters in optimizers
web自动化无头模式
bzoj3693 圆桌会议 hall定理+线段树
Shell三剑客之sed命令详解
First online!Messaging middleware fairy notes, covering the essence of Alibaba's ten years of technology
Redis RDB分析系统
Jingdong T9 pure hand type 688 pages of god notes, SSM framework integrates Redis to build efficient Internet applications
【kali-权限提升】(4.2.5)社会工程学工具包:PowerShell攻击向量(防报毒)
bzoj2816 [ZJOI2012] Network
Mysql的分布式事务原理理解
如何选择ui设计机构
Streamsets Data Collector 3.12
Chat with wine and chat, build an asynchronous non-blocking (aioredis) real-time (websocket) communication chat system based on Vue3.0+Tornado6.1+Redis publish-subscribe (pubsub) mode
[Unity entry plan] Use the double blood bar method to control the blood loss speed of the damage area
hdu2475 Box
连这几个网站都不知道,怪不得你的消息比别人落后
大佬们,这个测试demo只能获取到全量数据,不能获取增量,我的mysql 已经开启了row模式的bi
第一章、RPC 基础知识
Kubernetes-基础-常用命令