31. LeetCode un orden siguiente (lineal de exploración)

1. Tema

Lograr el acceso a la siguiente permutación función, el algoritmo requiere una secuencia numérica dada reordenados dispuesto junto mayor en orden lexicográfico.

Si la siguiente disposición más grande no existe, el número más pequeño de alineación reordenado (es decir, orden ascendente).

Debe colocar la edición , lo que permite un espacio adicional única constante.

以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,31,3,2
3,2,11,2,3
1,1,51,5,1

Fuente: estancia botón (LeetCode)
enlace: https: //leetcode-cn.com/problems/next-permutation
con derechos de autor por deducción de todas las redes. reimpresión comercial póngase en contacto con la reimpresión autorizada oficial, no comercial por favor indique la fuente.

2. Resolución de Problemas

2.1 next_permutation

bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last);
没有下一个更小或者更大的,返回的是false
class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        next_permutation(nums.begin(),nums.end());
    }
};

4 ms 6,8 MB

2. En la parte de atrás para encontrar el primer punto de entrega

Aquí Insertar imagen Descripción

  • Me parece que el punto de entrega
  • Hacia atrás para encontrar el punto i es mayor que el número mínimo, el intercambio
  • Por último, la parte posterior del número i en orden ascendente (invertida lata)
class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        if(nums.size() <= 1)
            return;
        int i = nums.size()-2, j, n = nums.size();
        while(i >= 0 && nums[i] >= nums[i+1])
            i--;
        if(i>=0)
        {
            j = i+1;
            while(j < n && nums[i] < nums[j])
                j++;
            swap(nums[i], nums[j-1]);   
        }
        reverse(nums,i+1,n-1);
    }

    inline void reverse(vector<int>& a, int l, int r)
    {
        while(l < r)
            swap(a[l++],a[r--]);
    }
};

0 ms 6,9 MB

Publicados 821 artículos originales · ganado elogios 1810 · Vistas de 410.000 +

Supongo que te gusta

Origin blog.csdn.net/qq_21201267/article/details/105371886
Recomendado
Clasificación