【Leet Code】31. Next Permutation---Medium

原创 2015年11月20日 15:36:04

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be in-place, do not allocate extra memory.

Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3 → 1,3,2
3,2,1 → 1,2,3

1,1,5 → 1,5,1

思路:

1)从最右边向左边遍历,找到第一个左边的数小于右边的数的位置fir;

2)如果fir==0,则说明原来数据是从大到小排序的,此时将整个数组翻转即可;

3)否则,先--fir,令fir指向第一个需要被交换的数,然后从右向左遍历找到第一个比fir的值大的数的位置sec,交换fir和sec的值,将fir后面的数据从小到大排序。


代码实现:

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
    int fir = nums.size() -1, sec = nums.size() -1;
    
    //先找到第一个比前面比后面大的数的位置。如[4,2, 0, 2, 3, 2, 0]里面2,3值2<3
    while(fir > 0 && nums[fir] <= nums[fir - 1]) --fir;

    //如果是最大数,即题目中的If such arrangement is not possible, it must rearrange it as the lowest possible order成立
    if(fir == 0)
    {
        reverse(nums.begin(), nums.end());
        return;
    }
    
    --fir; //令fir指向第一个要被交换的元素
    while(sec > fir && nums[sec] <= nums[fir]) --sec;
    swap(nums[fir], nums[sec]);
    
    //将新交换位置后面的所有数字从小到大排序
    sort(nums.begin()+fir+1, nums.end());
        
    }
};


Leet Code OJ 15. 3Sum[Difficulty: Medium]

Leet Code OJ 15. 3Sum[Difficulty: Medium]Given an array S of n integers, are there elements a, b, c ...

Leet Code OJ 15. 3Sum[Difficulty: Medium]

题目: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find a...

【Leet Code】147. Insertion Sort List---Medium

Sort a linkedlist using insertion sort. 思路: 插入排序主要有直接插入排序和希尔插入排序, 1) 直接插入排序 把一个记录插入到一个已经排好序的有序表中,从而得...
  • lili616
  • lili616
  • 2015年09月15日 16:08
  • 204

Leet Code OJ 482. License Key Formatting [Difficulty: Medium]

给定一个非空字符串S,代表一个软件授权秘钥,我们需要格式化这个秘钥。这个字符串由字母、数字(a-z and/or A-Z and/or 0-9)和中划线(-)组成。中划线把字符串S分为几个组(例如有M...

Leet Code OJ 91. Decode Ways [Difficulty: Medium]

题目: A message containing letters from A-Z is being encoded to numbers using the following mapping:'...

【Leet Code】148. Sort List---Medium

Sort a linkedlist in O(n log n) time using constant space complexity. 思路: 借助2-路归并排序实现。 基本思想: 归并排序(M...
  • lili616
  • lili616
  • 2015年09月15日 16:13
  • 214

Leet Code OJ 338. Counting Bits [Difficulty: Medium]

题目: Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate...

LeetCode刷题(C++)——Next Permutation(Medium)

Implement next permutation, which rearranges numbers into the lexicographically next greater permuta...

[LeetCode] 031. Next Permutation (Medium) (C++/Python)

[LeetCode] 031. Next Permutation (Medium) (C++/Python)
  • hcbbt
  • hcbbt
  • 2015年03月07日 16:11
  • 2037

LeetCode 31 Next Permutation (C,C++,Java,Python)

Problem: Implement next permutation, which rearranges numbers into the lexicographically next g...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Leet Code】31. Next Permutation---Medium
举报原因:
原因补充:

(最多只允许输入30个字)