【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 true
o 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.veganFriendlyi
maxPrice
maxDistance
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 .veganFriendlyi
veganFriendly
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
veganFriendlyi
El valor de la sumaveganFriendly
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 esveganFriendly
mayor o igual al valor requeridoveganFriendly
no será eliminado.price
: Si el restaurante esprice
mayor o igual al valor requeridoprice
no será eliminado.distance
: Si el restaurante esdistance
mayor o igual al valor requeridodistance
no 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