当前位置: 首页 > news >正文

【力扣hot100题】(098)下一个排列

这题做的真的挺痛苦的……

找到思路做起来还是很痛苦…………

先列几个例子找规律,发现需要从后往前先遍历,找到从后往前第一个递增的那个序号。

就拿51432距离,从后往前第一个递增的是1,因为4->3->2是递减,1->4是递增。

接着记录这个位置,下面只需要考虑这个位置之后的数变化排序就好了。

将后面的数全部倒序(原本是递减,倒序后变为递增),变成51234。

这里如果标记位置为-1(即原本已经是字典序最大的那个数就直接返回)

然后找后几个数中比标记数1大的最小数,因为是递增所以从前往后遍历234,发现比1大的最小数是2,交换1和2,变成52134,即为结果。

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int i=nums.size()-1;
        for(i;i>=1;i--){
            if(nums[i]>nums[i-1]) break;
        }
        int j=nums.size()-1;
        int x=i-1;
        int y=i;
        while(i<j){
            swap(nums[i],nums[j]);
            i++;
            j--;
        }
        if(y==0) return ;
        for(y;y<nums.size();y++){
            if(nums[y]>nums[x]){
                break;
            }
        }
        if(y>=0) swap(nums[x],nums[y]);
    }
};

相关文章:

  • 理想汽车MindVLA自动驾驶架构核心技术梳理
  • C语言斐波那契数列的多样实现
  • Day81 | 灵神 | 快慢指针 链表的中间结点 环形链表
  • 深入理解计算机操作系统(持续更新中...)
  • [dp9_子数组] 单词拆分 | 环绕字符串中唯一的子字符串
  • ​STM32H723 iPerf 调试笔记:MemManage_Handler 问题分析与解决
  • 入门到精通,C语言十大经典程序
  • 开发一款游戏需要哪些岗位角色参与?
  • CAN协议学习笔记1
  • 文章记单词 | 第29篇(六级)
  • linux下的目录文件管理和基本文件管理的基本操作
  • 5.3 GitHub订阅系统核心架构解密:高并发设计与SQLite优化实战
  • 「Unity3D」图片导入选项取消Read/Write,就无法正确显示导入大小,以及Addressable打包无法正确显示的问题
  • HarmonyOS应用开发指南
  • stm32+ADS1256称重模块,单通道称,多通道称(例如地磅)
  • MySQL一对多关系--多对多关系之间的区别
  • RCFile数据读取流程
  • 前缀和--
  • 消息中间件——RocketMQ(一)
  • 【复旦微FM33 MCU 底层开发指南】高级定时器ATIM
  • 广州医药集团有限公司原党委书记、董事长李楚源被“双开”
  • 盐城经济技术开发区党工委书记王旭东接受纪律审查和监察调查
  • 80后女博士黄双燕拟提名为内蒙古盟市政府(行署)副职人选
  • 101岁陕西省军区原司令员冀廷璧逝世,曾参加百团大战
  • 女生“生理期请病假要脱裤子证明”?高校回应:视频经处理后有失真等问题
  • 科普|认识谵妄:它有哪些表现?患者怎样走出“迷雾”?