Leetcode | Medio | Codicioso bidimensional | 406. Reconstruir la cola en función de la altura (codicioso 1 dimensional fijo y luego codicioso otro 1 dimensional)

Inserte la descripción de la imagen aquí

1 algoritmo codicioso bidimensional (versión de lista vinculada)

[Codicia]: ordena la altura de las dos dimensiones (la primera dimensión) en orden descendente, entre las cuales la altura de la misma altura, (la segunda dimensión) el número k delante de ella ocupa el primer lugar

局部最优: Primero inserte personas altas de acuerdo con el número k frente a ellas, de modo que cuando las inferiores se inserten hacia adelante, los atributos de las altas no se destruyan

全局最优: Finalmente, se realiza la operación de inserción y toda la cola satisface el atributo de la cola de preguntas
Inserte la descripción de la imagen aquí

Personas clasificadas:
[[7,0], [7,1], [6,1], [5,0], [5,2], [4,4]]
Proceso de inserción:
Insertar [7, 0]: [[7,0]]
insertar [7,1]: [[7,0], [7,1]]
insertar [6,1]: [[7,0], [6,1], [7, 1]]
Inserte [5,0]: [[5,0], [7,0], [6,1], [7,1]]
Inserte [5,2]: [[5,0], [ 7,0], [5,2], [6,1], [7,1]]
insertar [4,4]: [[5,0], [7,0], [5,2], [ 6,1], [4,4], [7,1]]

Estrategia para esta pregunta:

  • La h más alta tiene la prioridad más alta, y el mismo tamaño tiene la k más baja primero.
  • El inferior se inserta en la posición de k_i antes de la lista enlazada (no destruye los atributos del más alto delante del inferior)
class Solution {
    
    
private:
    static bool cmp(vector<int>& a, vector<int>& b) {
    
    
        if (a[0] == b[0]) return a[1] < b[1];
        return a[0] > b[0];
    }
public:
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
    
    
        // 1.高个子h大的优先,同等个子k小的优先
        sort(people.begin(), people.end(), cmp);
        list<vector<int>> lst;          // 链表提高插入效率
        lst.emplace_back(people[0]);
        for (int i = 1; i < people.size(); i++) {
    
     
            auto it = lst.begin();
            advance(it, people[i][1]);  // 将链表起始迭代器向后推进k_i个
            // 2.后面低个子插入到链表前k_i的位置(不破坏低个子前面高个子的属性)
            lst.insert(it, people[i]);
        }
        // 3.list转vector
        return vector<vector<int>> (lst.begin(), lst.end());
    }
};

Inserte la descripción de la imagen aquí

Gracias

La imagen proviene de la cuenta oficial de "Code Random Record", bienvenidos a todos a que presten atención a la cuenta oficial de este grandullón.

Supongo que te gusta

Origin blog.csdn.net/SL_World/article/details/114901325
Recomendado
Clasificación