当前位置:网站首页>leetcode-31:下一个排列
leetcode-31:下一个排列
2022-07-05 05:46:00 【菊头蝙蝠】
题目
题目连接
整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。
- 例如,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]
解题
方法一:
- 以12385764为例子,由于要查找下一个更大的,因此要倒序遍历。
- 倒序遍历,找到第一个递增的相邻元素57 (因此后面的元素一定是递减的,764)
- 然而并不能直接让5和7进行交换,而是让5和6交换。因此倒序遍历到找第一个比5大的元素,是6
- 交换完后变成了12386754,然而这并不是想要的下一个更大的元素(而是下面好几个元素)。因此对后面部分进行排序 12386 754---->12386 457
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n=nums.size();
int i=n-2,j=n-1;
while(i>=0&&nums[i]>=nums[j]){
i--;
j--;
}
int k=n-1;
if(i>=0){
while(nums[i]>=nums[k]) k--;
swap(nums[i],nums[k]);
}
sort(nums.begin()+i+1,nums.end());
}
};
边栏推荐
- Drawing dynamic 3D circle with pure C language
- Control unit
- Sword finger offer 35 Replication of complex linked list
- Time complexity and space complexity
- 剑指 Offer 06.从头到尾打印链表
- Codeforces Round #732 (Div. 2) D. AquaMoon and Chess
- Personal developed penetration testing tool Satania v1.2 update
- Acwing 4301. Truncated sequence
- 剑指 Offer 53 - I. 在排序数组中查找数字 I
- 【实战技能】如何做好技术培训?
猜你喜欢
A misunderstanding about the console window
CF1634E Fair Share
AtCoder Grand Contest 013 E - Placing Squares
Typical use cases for knapsacks, queues, and stacks
Sword finger offer 05 Replace spaces
R language [import and export of dataset]
【实战技能】非技术背景经理的技术管理
Brief introduction to tcp/ip protocol stack
剑指 Offer 06.从头到尾打印链表
In this indifferent world, light crying
随机推荐
Daily question 1984 Minimum difference in student scores
Typical use cases for knapsacks, queues, and stacks
lxml. etree. XMLSyntaxError: Opening and ending tag mismatch: meta line 6 and head, line 8, column 8
Sword finger offer 58 - ii Rotate string left
Daily question 2006 Number of pairs whose absolute value of difference is k
2022年贵州省职业院校技能大赛中职组网络安全赛项规程
Cluster script of data warehouse project
After setting up the database and website When you open the app for testing, it shows that the server is being maintained
卷积神经网络——卷积层
【Jailhouse 文章】Look Mum, no VM Exits
1996. number of weak characters in the game
智慧工地“水电能耗在线监测系统”
Codeforces Round #716 (Div. 2) D. Cut and Stick
Sword finger offer 53 - I. find the number I in the sorted array
读者写者模型
Introduction to convolutional neural network
Analysis of backdoor vulnerability in remote code execution penetration test / / phpstudy of national game title of national secondary vocational network security B module
Alu logic operation unit
26、 File system API (device sharing between applications; directory and file API)
Sword finger offer 06 Print linked list from beginning to end