lintcode 上一个排列

作者: yzawyx0220 | 来源:发表于2016-12-30 09:37 被阅读72次

给定一个整数数组来表示排列,找出其上一个排列。
样例
给出排列[1,3,2,3],其上一个排列是[1,2,3,3]
给出排列[1,2,3,4],其上一个排列是[4,3,2,1]

上一个排列是指在该数组所有的排列中,比这个排列小且小的最少的那个排列,因此优先从个位、十位、百位。。。考虑。设置两个指针,其中一个指针从末尾开始遍历,另一个指针从末尾遍历到当前另一个指针的位置,只要发现高位有比低位大的数,交换一下位置,再把高位后面的数反转即可(这样才能保证新数的数比原来的数大的最少,是挨着的排列)。如果遍历到高位,并且没有交换的话,说明这个排列是所有排列中最小的,只要翻转一下数组就可以了。

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
        for (int i = nums.size()-1;i >= 0;i--) {
            for (int j = nums.size()-1;j > i;j--) {
                if (nums[i] > nums[j]) {
                    swap(nums[i],nums[j]);
                    reverse(nums.begin()+i+1,nums.end());
                    return nums;
                }
            }
        }
        reverse(nums.begin(),nums.end());
        return nums;
    }
};

相关文章

  • lintcode 上一个排列

    给定一个整数数组来表示排列,找出其上一个排列。样例给出排列[1,3,2,3],其上一个排列是[1,2,3,3]给出...

  • lintcode 全排列

    给定一个数字列表,返回其所有可能的排列,第十五题是没有重复的数字,是十六题是有重复的数字。先来说没有重复数字的情况...

  • 全排列 (lintcode:permutations)

    给定一个数字列表,返回其所有可能的排列。假设没有重复数字。样例:给出一个列表[1,2,3],其全排列为: 代码: ...

  • lintcode 15 全排列

    递归算法思路:对数据[1,2,3],需要一次遍历;每次遍历,确定首位,[1,...];[2,...];[3,......

  • 排列问题

    上一个排列 问题描述 给定一个整数数组来表示排列,找出其上一个排列。排列中可能包含重复的整数 输入输出

  • 排列类算法问题大总结

    全排列 带重复元素的排列 下一个排列 上一个排列 第 k 个排列 排列序号 排列序号II 全排列 给定一个数字列表...

  • lintcode 字符大小写排列

    给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序。样例给出"abAcD",一个可能的答案为"ac...

  • 程序员常用的刷题网站

    1、Lintcode Lintcode.com——LintCode网站是国内较大的在线编程&测评网站。此网站提供各...

  • lintcode 下一个排列

    给定一个整数数组来表示排列,找出其之后的一个排列。样例给出排列[1,3,2,3],其下一个排列是[1,3,3,2]...

  • LintCode全排列的非递归写法

    题目点这里花了好久写的(没有IDE,只能靠println来手动debug了)不过算法算是码农的基本功,还是需要多多...

网友评论

    本文标题:lintcode 上一个排列

    本文链接:https://www.haomeiwen.com/subject/xsqmvttx.html