lintcode 下一个排列(52)
来源:互联网 发布:notepad mac 编辑:程序博客网 时间:2024/04/28 12:31
给定一个整数数组来表示排列,找出其之后的一个排列。
注意事项
排列中可能包含重复的整数
样例
********************************************************************************************给出排列[1,3,2,3]
,其下一个排列是[1,3,3,2]
给出排列[4,3,2,1]
,其下一个排列是[1,2,3,4]
这问题类似于全排列问题,全排列问题有一种解法,叫字典序法。 参考 点击打开链接
题目意思是找,比给定序列大一点的最小序列。
步骤:
1.从右至左找第一个升序的两个元素。A[k]<A[k+1]
2.从右至k,找到第一个比A[k]大的元素A[i],交换A[k], A[k]的位置
3.反转k+1到最后的元素
vector<int> nextPermutation(vector<int> &nums) { // write your code here int p; int i; for(i=nums.size()-2;i>=0;i--){ if(nums[i]<nums[i+1]){ p=i; break; } } if(i<0){ sort(nums.begin(),nums.end()); return nums; } for(i=nums.size()-1;i>p;i--){ if(nums[i]>nums[p]){ swap(nums[i],nums[p]); break; } } reverse(nums.begin()+p+1,nums.end()); return nums; }*******************************************************************************************************
类似得到 上一个排列 的题目
vector<int> previousPermuation(vector<int> &nums) { // write your code here int p; int i; for(i=nums.size()-2;i>=0;i--){ if(nums[i]>nums[i+1]){ p=i; break; } } if(i<0){ sort(nums.begin(),nums.end()); reverse(nums.begin(),nums.end()); return nums; } for(i=nums.size()-1;i>p;i--){ if(nums[i]<nums[p]){ swap(nums[i],nums[p]); break; } } reverse(nums.begin()+p+1,nums.end()); return nums; }
0 0
- lintcode 下一个排列(52)
- LintCode 52-下一个排列
- LintCode 52 下一个排列
- LintCode-下一个排列
- lintcode-下一个排列
- 下一个排列 lintcode
- 下一个排列-lintcode
- Lintcode 下一个排列
- LintCode : 下一个排列
- lintcode[190]:下一个排列
- lintcode -- 下一个排列
- 下一个排列-LintCode
- lintcode---下一个排列
- lintcode刷题——下一个排列
- lintode(52)下一个排列
- 当前排列的下一个排列(leetcode31)
- 下一个排列
- 下一个排列
- 初中生的学习方法和技巧
- 实用脚本--遍历oratab,批量执行数据库命令
- 系统时间
- 前后端分离:前端人员做页面与渲染,后端做接口
- logcat没有输出的解决方法
- lintcode 下一个排列(52)
- mysql 锁
- PowerDesigner跟表的字段加注释
- CCNA知识点3 子网划分、变长子网掩码(VLSM)和TCP/IP排错
- View controller-based status bar appearance
- 放入一些平时收藏的网址(如果支持chrome式的书签管理或折叠式菜单进行分类就好了)
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片比较
- 石子归并DP
- Ember component