zoukankan      html  css  js  c++  java
  • [itint5]下一个排列

    http://www.itint5.com/oj/#6

    首先,试验的时候要拿5个来试,3,4个都太少了。好久没做所以方法也忘了,是先从后往前找到第一个不合顺序的,然后在后面找到比这个大的最小的来交换,再把后面排序。

    #include <algorithm>
    #include <vector>
    #include <climits>
    using namespace std;
    bool next_permutation(vector<int> &arr) {
        bool has_next = false;
        int size = arr.size();
        int i = arr.size() - 1;
        while (i - 1 >= 0) {
            if (arr[i-1] < arr[i]) {
                has_next = true;
                break;
            }
            i--;
        }
        if (!has_next) return false;
        // find the min after i-1
        int min = INT_MAX;
        int minIdx = -1;
        for (int j = i; j < size; j++) {
            if (arr[j] > arr[i-1] && arr[j] < min) {
                min = arr[j];
                minIdx = j;
            }
        }
        int tmp = arr[i-1];
        arr[i-1] = arr[minIdx];
        arr[minIdx] = tmp;
        // sort elements from i
        sort(arr.begin()+i, arr.end());
        return true;
    }
    

      

  • 相关阅读:
    函数
    字符串格式化
    集合
    习题02
    int/str/list/tuple/dict必会
    元组/字典
    列表方法
    练习题(format、expandtabs、片层)
    字符串方法
    JMM
  • 原文地址:https://www.cnblogs.com/lautsie/p/3525876.html
Copyright © 2011-2022 走看看