[código de acceso] 1403. Posterior mínima en orden no creciente

Descripción

Dados los números de la matriz, obtenga una subsecuencia de la matriz cuya suma de elementos sea estrictamente mayor que la suma de los elementos no incluidos en dicha subsecuencia.

Si hay varias soluciones, devuelva la subsecuencia con el tamaño mínimo y si todavía existen varias soluciones, devuelva la subsecuencia con la suma total máxima de todos sus elementos. Se puede obtener una subsecuencia de una matriz borrando algunos elementos (posiblemente cero) de la matriz.

Tenga en cuenta que se garantiza que la solución con las restricciones dadas es única. También devuelve la respuesta ordenada en orden no creciente.

Ejemplo 1:

Input: nums = [4,3,10,9,8]
Output: [10,9] 
Explanation: The subsequences [10,9] and [10,8] are minimal such that the sum of their elements is strictly greater than the sum of elements not included, however, the subsequence [10,9] has the maximum total sum of its elements. 

Ejemplo 2:

Input: nums = [4,4,7,6,7]
Output: [7,7,6] 
Explanation: The subsequence [7,7] has the sum of its elements equal to 14 which is not strictly greater than the sum of elements not included (14 = 4 + 4 + 6). Therefore, the subsequence [7,6,7] is the minimal satisfying the conditions. Note the subsequence has to returned in non-decreasing order.  

Ejemplo 3:

Input: nums = [6]
Output: [6]

Restricciones:

  • 1 <= núm. De longitud <= 500
  • 1 <= números [i] <= 100

análisis

El significado de la pregunta es: Dada una secuencia de números, encuentre una secuencia donde la suma de una subsecuencia sea mayor que la suma de las secuencias restantes. Encuentre la subsecuencia más pequeña que cumpla las condiciones.

  • Método codicioso, ordena la matriz, busca de atrás hacia adelante, encuentra el número grande primero, usa cur para registrar la suma atravesada y res para registrar el valor atravesado. Cuando cur es mayor que la suma total de la matriz para el primera vez, significa que se ha encontrado una res. elegible.

Código

class Solution {
public:
    int distributeCandies(vector<int>& candies) {
        unordered_set<int> s;
        int cnt=0;
        for(int candy:candies){
            s.insert(candy);
            cnt++;
        }
        return min((int)s.size(),cnt/2); 
    }
};

referencias

【LeetCode】 1403. Subsecuencia mínima en orden no creciente

Supongo que te gusta

Origin blog.csdn.net/w5688414/article/details/115270403
Recomendado
Clasificación