文章目录
-
-
- 题目描述
- 解题思路
- 题解
-
题目描述
文章图片
文章图片
解题思路
【leetcode|【LC】31. 下一个排列】
文章图片
题解
class Solution {
private:
//反转降序的后部分
void reverse(vector& nums, int left, int right)
{
while(left < right)
{
swap(nums[left++], nums[right--]);
}
}
public:
void nextPermutation(vector& nums) {int len = nums.size();
if (len < 1) return;
//反遍历,找到非降序的首元素
int i = len - 2;
while (i >= 0 && nums[i] >= nums[i + 1])
{
--i;
}
if (i >= 0)
{
int j = len - 1;
while (j >= 0 && nums[j] <= nums[i])
{
--j;
}
swap(nums[i], nums[j]);
}
reverse(nums ,i + 1, len - 1);
}
};
推荐阅读
- 数据结构与算法|单调栈-部分有序
- 数据结构|劈叉都会还不会下腰吗((二叉树经典面试题详解))
- c语言|leetcode707 设计链表 (C语言实现)
- 算法|寻找峰值-162-[中等]- [二分查找模板 - II ]
- 每日一道算法题|Leetcode 213.打家劫舍 II &剑指Offer II 090. 环形房屋偷盗
- 每日一道算法题|算法技巧——位运算
- 算法|Leetcode刷题笔记之: 链表(单链表经典题目)
- 算法练习300题|【leetcode刷题】19.回文链表——Java版
- 每天刷题档|merge_sort_归并排序 —每日算法档