博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从头做leetcode之leetcode 31 下一个排列
阅读量:2435 次
发布时间:2019-05-10

本文共 1058 字,大约阅读时间需要 3 分钟。

31.下一个排列

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须原地修改,只允许使用额外常数空间。

暴力法

  • 从尾部遍历数组。找到 i 处比 i-1 处位置大的数,并把从 i 到尾部中最小的数与 i-1 处交换(保证是比原排列大的最小的排列),然后将交换位置右边的数降序排序即可。‘
class Solution {public:     void nextPermutation(vector
& nums) { if(nums.size() < 2) return ; for(int i=nums.size()-1;i>0;i--){ if(nums[i] > nums[i-1]){ int min=nums[i]; int flag=i; for(int j=i+1;j < nums.size();j++){ if( nums[j] > nums[i-1] && nums[j] < min){ flag=j; min=nums[j]; } } int temp=nums[i-1];//可以直接用swap函数 nums[i-1]=nums[flag]; nums[flag]=temp; sort(nums.begin()+i,nums.end()); return ; } if(i==1 && nums[i] < nums[0]){ sort(nums.begin(),nums.end());//这里也可以用reverse(nums.begin(),nums.end())效果一样 return ; } } }};

通过时间:

在这里插入图片描述

转载地址:http://xiemb.baihongyu.com/

你可能感兴趣的文章
几个分析函数的比较
查看>>
主流算法:
查看>>
RMI
查看>>
J.U.C之Future
查看>>
缓存思想分析
查看>>
一致性hash
查看>>
J.U.C之ConcurrentHashMap分析
查看>>
J.U.C之CopyOnWriteArrayList
查看>>
J.U.C之Atomic&CAS
查看>>
类的生命周期
查看>>
Joda-Time学习
查看>>
Guava扩展工具包
查看>>
BeanFactory和FactoryBean
查看>>
用户态和内核态的概念区别
查看>>
Jsp连接数据库大全
查看>>
WebSphere Application Server 常见问题及解答:集群
查看>>
SOA 治理框架和解决方案架构
查看>>
使用 WebSphere Business Modeler 进行业务建模
查看>>
SOA 案例研究:Web 2.0 SOA 场景
查看>>
IBM BPM BlueWorks:一次 WebSphere 云试验
查看>>