#51 Previous Permutation
来源:互联网 发布:sql统计两个字段总和 编辑:程序博客网 时间:2024/05/21 11:34
题目描述:
Given a list of integers, which denote a permutation.
Find the previous permutation in ascending order.
Notice
The list may contains duplicate integers.
Example
题目思路:For [1,3,2,3]
, the previous permutation is [1,2,3,3]
For [1,2,3,4]
, the previous permutation is [4,3,2,1]
这题和#51差不多,有些地方改一下就好了。
Mycode(AC = 30ms):
class Solution {public: /** * @param nums: An array of integers * @return: An array of integers that's previous permuation */ vector<int> previousPermuation(vector<int> &nums) { // write your code here if (nums.size() <= 1) return nums; // find the key position int idx = -1; for (int i = nums.size() - 2; i >= 0; i--) { if (nums[i] > nums[i + 1]) { idx = i; break; } } // if is the larget sequence, return reverse if (idx == -1) { reverse(nums.begin(), nums.end()); return nums; } int second_max = nums[idx + 1], second_idx = idx + 1; for (int i = idx + 1; i < nums.size(); i++) { if (nums[i] < nums[idx] && nums[i] > second_max) { second_max = nums[i]; second_idx = i; } } // swap swap(nums, idx, second_idx); // sort the rest numbers with decending order sort(nums.begin() + idx + 1, nums.end()); reverse(nums.begin() + idx + 1, nums.end()); return nums; } void swap(vector<int> &nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; }};
)
0 0
- #51 Previous Permutation
- Previous Permutation
- Previous Permutation
- Lintcode - Previous Permutation
- Lintcode51 Previous Permutation solution 题解
- 51.Previous Permutation-上一个排列(中等题)
- Permutation
- Permutation
- permutation
- Permutation
- Permutation
- Permutation
- permutation
- Permutation
- permutation
- Permutation
- Permutation
- permutation
- 15个不起眼但非常强大的 Vim 命令
- 学习记录:安装binwalk
- 解决RedHat中ifconfig命令不能使用的问题
- 大神谁来帮帮我
- tensorflow爬坑行:数据读取
- #51 Previous Permutation
- 视频流中的 I帧 P帧 B帧 .
- 【u019】排序(sort)
- 矩阵归零
- MySQL查询语句
- sublime text 3下的Markdown写作
- 《一个操作系统的实现》——pmtest1.asm详解
- 【NOIP2014】飞扬的小鸟
- STL_算法(23)_删除_(1)