首页 > 其他分享 >leetcode 31. 下一个排列 中等

leetcode 31. 下一个排列 中等

时间:2024-11-19 13:07:41浏览次数:1  
标签:nums int 31 中等 pBigger 倒序 pSmaller leetcode size

leetcode 31. 下一个排列

看了题解的思路,用自己看得懂的方式写的代码

 

class Solution {
public:
    void reverse(int left,int right,vector<int>& nums){
        for(int i = left,j = right;i < j;i++,j--)
            swap(nums[i],nums[j]);   
    }

    void nextPermutation(vector<int>& nums) {
        int size = nums.size();
        if(size == 1)  return;
        if(size == 2){
            swap(nums[0],nums[1]);return;
        }
        
        int pSmaller = -1;//找到第一个非倒序的数的坐标
        for(int i = size-2; i >= 0; i--){
            if(nums[i] < nums[i+1]){
                pSmaller = i;break;
            }
        }
        //如果第一个非倒序的数的坐标还是-1,那么整个序列就是递减的
        if(pSmaller == -1){
            reverse(0,size-1,nums);return;
        }

        int pBigger;//找到比第一个非倒序的数更大一点的数的坐标
        //因为能找到pSmall,就保证了从pSmall到序列结尾都是递减的
        for(int j = size-1; j >= pSmaller + 1; j--){
            if(nums[pSmaller] < nums[j]){
                pBigger = j;break;
            }
        }

        swap(nums[pSmaller],nums[pBigger]);
        reverse(pSmaller+1, size-1, nums);
    }
};

 

标签:nums,int,31,中等,pBigger,倒序,pSmaller,leetcode,size
From: https://www.cnblogs.com/uacs2024/p/18554635

相关文章

  • LeetCode 2769[找出最大的可达成数字]
    题目链接LeetCode2769[找出最大的可达成数字]详情实例提示题解思路每一步操作可同时操作num和x,可同时增加或者减少,若使num为最小值,每一步增加1个,同时x减少一个,则此时的x即为最大值num减少同时x增加,则操作t步后,num和x一样,即num+t=x-t,则x......
  • 20222319 2024-2025-1 《网络与系统攻防技术》实验六实验报告
    1.实验内容1.1本周学习内容本周主要学习了利用msf实现对漏洞主机攻击的具体实现原理与过程,认识XP系统、win7系统存在的许多可利用漏洞,再次复习了namp的指令,学会了主机发现、系统扫描、漏洞扫描等技术。1.2实验要求(1)前期渗透主机发现端口扫描扫描系统版本,漏洞等(2)Vsf......
  • P1314 [NOIP2011 提高组] 聪明的质监员
    题目[NOIP2011提高组]聪明的质监员题目描述小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有n个矿石,从1到n逐一编号,每个矿石都有自己的重量wi以及价值vi。检验矿产的流程是:给定m个区间[li,ri];选出一个参数W;对于一个区间[li,ri],计算矿石在这......
  • P1314 [NOIP2011 提高组] 聪明的质监员
    P1314[NOIP2011提高组]聪明的质监员#[NOIP2011提高组]聪明的质监员题目描述小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有个矿石,从到逐一编号,每个矿石都有自己的重量以及价值。检验矿产的流程是:给定个区间;选出一个参数;对于一个区间,计......
  • 20222312 2024-2025-1《网络与系统攻防技术》实验五实验报告
    一、实验内容1.1知识回顾1.2实验内容从besti.edu.cn中选择一个DNS域名进行查询,获取信息尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体地理位置。使用nmap开源软件对靶机环境进行扫描,回答以下问题并给出操作命令。使用Nessus开源软件对靶机环境......
  • 代码随想录算法训练营第七天(LeetCode454.四数相加Ⅱ;LeetCode383.赎金信;LeetCode15.三
    LeetCode454.四数相加Ⅱ题目链接:四数相加Ⅱ题目链接思路这道题目给定我们四个数组,让我们判断从四个数组中分别取一个元素,然后将这四个元素相加,值为0的元组个数,所以我们可以模仿两数之和,因为四个数组中分别取元素就是任意取,不需要考虑去重的问题,所以可以将四个数组转......
  • 代码随想录算法训练营第八天(LeetCode344.反转字符串;LeetCode541.反转字符串Ⅱ;卡码网54
    LeetCode344.反转字符串题目链接:反转字符串题目链接思路这道题目让我们进行字符串的反转,其实直接使用reverse相关的函数就可以解决问题。但是解决问题的时候,如果这道题目使用库函数就可以直接解决,就最好不要使用库函数;如果库函数只是题目中解法的一小步,那么就使用......
  • SpringBoot招聘就业管理531ii--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题名称招聘就业管理系统设计与实现二、研究背景与意义随着就业市场的日益扩大和竞争的加剧,招聘就业管理成为企业和求职者共同关注的焦点。......
  • 202222313 2024-2025-1 《网络与系统攻防技术》实验六实验报告
    1.实验内容1.1实验要求(1)掌握metasploit、nmap的用法。(2)学习前期渗透的方法。(3)利用4个漏洞,实现对靶机的攻击。1.2学习内容(1)metasploit的用法:可以简单总结为“Search-Use-Show-Set-Exploit/run”。(2)四种漏洞的原理。Vsftpd源码包后门漏洞:在特定版本的vsftpd......
  • luogu P1314 聪明的质监员
    [NOIP2011提高组]聪明的质监员题目描述小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\)以及价值\(v_i\)。检验矿产的流程是:给定$m$个区间\([l_i,r_i]\);选出一个参数\(W\);对......