首页 > 其他分享 >31. 下一个排列(stl的algorithm中next_permutation的实现)

31. 下一个排列(stl的algorithm中next_permutation的实现)

时间:2022-11-22 22:46:09浏览次数:67  
标签:arr 排列 algorithm nums 一个 31 next 数组 first

注:这题思路就是stl的algorithm中next_permutation的实现思路

整数数组的一个 排列  就是将其所有成员以序列或线性顺序排列。

  • 例如,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]


class Solution {
public:
    
    
    void nextPermutation(vector<int>& nums) {
        
        int first=0;
        int i;
        for(i=nums.size()-1;i>0;i--)
        {
            if(nums[i-1]<nums[i]) 
            {
                first=i-1;
                break;
            }
        }
        int second=0;
        for(int j=nums.size()-1;j>=i;j--)
        {
            if(nums[j]>nums[first])
            {
                second=j;
                break;
            }
        }
        swap(nums[first],nums[second]);
        if(first==0&&second==0)  reverse((nums.begin()),nums.end()); //如果已经是最大
        else   reverse((nums.begin()+first+1),nums.end());
        
        return ;
    }
};

 

标签:arr,排列,algorithm,nums,一个,31,next,数组,first
From: https://www.cnblogs.com/zzzlight/p/16916747.html

相关文章

  • 支持安卓11.0操作系统——《XY310 4G 核心板》相关基本功能以及参数!
        产品概括:《XY6877ZA5GAI安卓核心板》基于紫光展锐T310(虎贲T310)平台,支持BOM全国产化,4G全网通。内构设置为研发人员精心自主研发技术成果。内有研发人员精心搭......
  • Dijkstra Algorithm
    与BFS不同的是每条路径多了权重1.步骤:找到最便宜的节点,即可在最短时间内前往的节点对于该节点的邻居,检查是否有前往它们的更短路径,如果有,就更新其开销。重复这个过程,直到对......
  • P3178 [HAOI2015]树上操作 的dfs序题解
    操作1:把某个节点x的点权增加a。操作2:把某个节点x为根的子树中所有点的点权都增加a。操作3:询问某个节点x到根的路径中所有点的点权和。//点修改+树修改,(点......
  • set ip next-hop verify-availabitity
    setipnext-hopverify-availabitity   R2配置setipnext-hopverify-availabitity 让路由器搜索CDP邻居表来验证下一跳地址是否在列表中,如果不在,       ......
  • APP-SQLAP-97731:由于出现以外错误,请与您的系统管理员联系。而使计税失败,系统无法生成
    AP发票验证的时候,提示:OraclePayables由于以下原因而无法计税:出现意外错误。请与您的系统管理员联系。 没啥有用的信息,后来在发票头重点击税详细信息的时候报错:......
  • 503.下一个更大元素II next-greater-element-ii
    问题描述503.下一个更大元素II解题思路相比496.下一个更大元素I,在遍历数组上有所区别,如果i>=nums.size(),用j=i-nums.size();来代替i,因此i的取值范围是[0,2*num......
  • ASEMI肖特基二极管SS310L参数,SS310L体积,SS310L大小
    编辑-ZASEMI肖特基二极管SS310L参数:型号:SS310L最大重复峰值反向电压(VRRM):100V最大RMS电桥输入电压(VRMS):70V最大直流阻断电压(VDC):100V最大平均正向整流输出电流(IF):3.0A峰......
  • 496.下一个最大元素I next-greater-element-i
    问题描述496.下一个更大元素I解题思路本题利用单调栈(monotonestack)来遍历nums2,并且利用unordered_map来存储nums1中元素和对应的结果。代码classSolution{pub......
  • AcWing 831.KMP字符串
    AcWing831.KMP字符串题目描述给定一个字符串S,以及一个模式串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串P在字符串S中多次作为子串出现。求出......
  • NB-IoT天线同轴电缆RG316、RG174、RG178
    NB-IoT的天线电缆可以接多长?常用的线缆有RG316、RG174、RG178,不同的线缆其衰减程度如何?|型号|阻抗(ohms)|内芯(mm)|内绝缘|外绝缘|外径(mm)|衰减(dB)|内芯导体|屏蔽层导体||—|---|......