LeetCode 1333. Filtro de restaurante

【LetMeFly】1333. Filtro de restaurante

Enlace de pregunta de Leetcode: https://leetcode.cn/problems/filter-restaurants-by-vegan-friendly-price-and-distance/

Se le proporciona una variedad de información sobre restaurantes  restaurants, dónde   . Debe utilizar los siguientes tres filtros para filtrar la información de estos restaurantes.restaurants[i] = [idi, ratingi, veganFriendlyi, pricei, distancei]

Donde el valor del filtro apto para vegetarianos  veganFriendly puede ser trueo false, si verdadero  significa que solo debe incluir   restaurantes, donde verdadero significa que solo debe incluir restaurantes,  falso  significa que se puede incluir cualquier restaurante. Además, contamos con   dos filtros : Precio Máximo  y Distancia Máxima  , que consideran el valor máximo del factor precio del restaurante y del factor distancia respectivamente.veganFriendlyimaxPricemaxDistance

Después del filtrado, se devuelven los ID de los restaurantes ,  ordenados de mayor a menor por calificación . Si las calificaciones son las mismas, ordene por identificación de mayor a menor. Por simplicidad,   el valor es 1 cuando la suma  es  verdadera y 0 cuando  es falsa .veganFriendlyiveganFriendly

 

Ejemplo 1:

Entrada: restaurantes = [[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10, 3],[5,1,1,15,1]], veganFriendly = 1, maxPrice = 50, maxDistance = 10
 Salida: [3,1,5] 
 Explicación: 
 Estos restaurantes son: 
Restaurante 1 [id=1, calificación =4, veganFriendly=1, precio=40, distancia=10] 
Restaurante 2 [id=2, rating=8, veganFriendly=0, precio=50, distancia=5] 
Restaurante 3 [id=3, rating=8, veganFriendly =1, precio=30, distancia=4] 
Restaurante 4 [id=4, calificación=10, veganFriendly=0, precio=10, distancia=3] 
Restaurante 5 [id=5, calificación=1, veganFriendly=1, precio =15, distancia=1] 
Después de filtrar por veganFriendly = 1, maxPrice = 50 y maxDistance = 10, obtenemos el Restaurante 3, el Restaurante 1 y el Restaurante 5 (ordenados por calificación de mayor a menor).

Ejemplo 2:

Entrada: restaurantes = [[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10, 3], [5,1,1,15,1]], veganFriendly = 0, maxPrice = 50, maxDistance = 10
 Salida: [4,3,2,1,5]
 Explicación: Los restaurantes son los mismos que en el ejemplo 1 , pero en Con la condición de filtro veganFriendly = 0, se deben considerar todos los restaurantes.

Ejemplo 3:

Entrada: restaurantes = [[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10, 3],[5,1,1,15,1]], veganFriendly = 0, maxPrice = 30, maxDistance = 3
 Salida: [4,5]

 

pista:

  • 1 <= restaurants.length <= 10^4
  • restaurants[i].length == 5
  • 1 <= idi, ratingi, pricei, distancei <= 10^5
  • 1 <= maxPrice, maxDistance <= 10^5
  • veganFriendlyiEl valor de la suma  veganFriendly es 0 o 1.
  • Todos son diferentes.idi

Método 1: ordenar

Cree una matriz temporal que almacene elementos que cumplan las condiciones.

Luego ordene los elementos en la matriz de acuerdo con las reglas de clasificación primero e identificación primero. Después de ordenar, coloque la identificación de cada elemento en la matriz temporal en una nueva matriz y devuélvala.

¿Cómo determinar si un restaurante cumple las condiciones?

  • veganFriendly: Si el restaurante es veganFriendlymayor o igual al valor requerido veganFriendlyno será eliminado.
  • price: Si el restaurante es pricemayor o igual al valor requerido priceno será eliminado.
  • distance: Si el restaurante es distancemayor o igual al valor requerido distanceno será eliminado.

Eso es todo.

  • Complejidad del tiempo O ( n log ⁡ n ) O(n\log n)O ( n.iniciar sesiónn ),其中n = len ( restaurantes ) n = len(restaurantes)norte=l e n ( rest a u r ant s ) _ _
  • Complejidad espacial O ( n ) O (n)O ( n )

código de CA

C++
class Solution {
    
    
public:
    vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) {
    
    
        vector<vector<int>> temp;
        for (auto&& v : restaurants) {
    
    
            if (v[2] >= veganFriendly && v[3] <= maxPrice && v[4] <= maxDistance) {
    
    
                temp.push_back(v);
            }
        }
        sort(temp.begin(), temp.end(), [](const vector<int>& a, const vector<int>& b) {
    
    
            return a[1] == b[1] ? a[0] > b[0] : a[1] > b[1];
        });
        vector<int> ans;
        for (auto&& v : temp) {
    
    
            ans.push_back(v[0]);
        }
        return ans;
    }
};
Pitón
# from typing import List

class Solution:
    def filterRestaurants(self, restaurants: List[List[int]], veganFriendly: int, maxPrice: int, maxDistance: int) -> List[int]:
        temp = [v for v in restaurants if v[2] >= veganFriendly and v[3] <= maxPrice and v[4] <= maxDistance]
        temp.sort(key=lambda v:(-v[1], -v[0]))
        return [v[0] for v in temp]

El artículo se publica simultáneamente en CSDN. No es fácil ser original. Adjunte el enlace al artículo original después de la reimpresión con el consentimiento del autor ~
Tisfy: https://letmefly.blog.csdn.net/article/details/133362152

Supongo que te gusta

Origin blog.csdn.net/Tisfy/article/details/133362152
Recomendado
Clasificación