Skip to content

Commit fce74c0

Browse files
committed
feat: add solutions to lc problem: No.1333
No.1333.Filter Restaurants by Vegan-Friendly, Price and Distance
1 parent 999df59 commit fce74c0

File tree

7 files changed

+268
-2
lines changed

7 files changed

+268
-2
lines changed

solution/1300-1399/1333.Filter Restaurants by Vegan-Friendly, Price and Distance/README.md

Lines changed: 98 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,22 +58,119 @@
5858

5959
<!-- 这里可写通用的实现逻辑 -->
6060

61+
**方法一:排序**
62+
63+
我们先将数组 `restaurants` 按照 `rating``id` 两个维度进行排序,然后再按照题目给定的条件进行筛选即可。
64+
65+
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 是数组 `restaurants` 的长度。
66+
6167
<!-- tabs:start -->
6268

6369
### **Python3**
6470

6571
<!-- 这里可写当前语言的特殊实现逻辑 -->
6672

6773
```python
68-
74+
class Solution:
75+
def filterRestaurants(
76+
self,
77+
restaurants: List[List[int]],
78+
veganFriendly: int,
79+
maxPrice: int,
80+
maxDistance: int,
81+
) -> List[int]:
82+
restaurants.sort(key=lambda x: (-x[1], -x[0]))
83+
ans = []
84+
for idx, _, vegan, price, dist in restaurants:
85+
if vegan >= veganFriendly and price <= maxPrice and dist <= maxDistance:
86+
ans.append(idx)
87+
return ans
6988
```
7089

7190
### **Java**
7291

7392
<!-- 这里可写当前语言的特殊实现逻辑 -->
7493

7594
```java
95+
class Solution {
96+
public List<Integer> filterRestaurants(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {
97+
Arrays.sort(restaurants, (a, b) -> a[1] == b[1] ? b[0] - a[0] : b[1] - a[1]);
98+
List<Integer> ans = new ArrayList<>();
99+
for (int[] r : restaurants) {
100+
if (r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance) {
101+
ans.add(r[0]);
102+
}
103+
}
104+
return ans;
105+
}
106+
}
107+
```
108+
109+
### **C++**
110+
111+
```cpp
112+
class Solution {
113+
public:
114+
vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) {
115+
sort(restaurants.begin(), restaurants.end(), [](const vector<int>& a, const vector<int>& b) {
116+
if (a[1] != b[1]) {
117+
return a[1] > b[1];
118+
}
119+
return a[0] > b[0];
120+
});
121+
vector<int> ans;
122+
for (auto& r : restaurants) {
123+
if (r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance) {
124+
ans.push_back(r[0]);
125+
}
126+
}
127+
return ans;
128+
}
129+
};
130+
```
131+
132+
### **Go**
133+
134+
```go
135+
func filterRestaurants(restaurants [][]int, veganFriendly int, maxPrice int, maxDistance int) (ans []int) {
136+
sort.Slice(restaurants, func(i, j int) bool {
137+
a, b := restaurants[i], restaurants[j]
138+
if a[1] != b[1] {
139+
return a[1] > b[1]
140+
}
141+
return a[0] > b[0]
142+
})
143+
for _, r := range restaurants {
144+
if r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance {
145+
ans = append(ans, r[0])
146+
}
147+
}
148+
return
149+
}
150+
```
76151

152+
### **TypeScript**
153+
154+
```ts
155+
function filterRestaurants(
156+
restaurants: number[][],
157+
veganFriendly: number,
158+
maxPrice: number,
159+
maxDistance: number,
160+
): number[] {
161+
restaurants.sort((a, b) => (a[1] === b[1] ? b[0] - a[0] : b[1] - a[1]));
162+
const ans: number[] = [];
163+
for (const [id, _, vegan, price, distance] of restaurants) {
164+
if (
165+
vegan >= veganFriendly &&
166+
price <= maxPrice &&
167+
distance <= maxDistance
168+
) {
169+
ans.push(id);
170+
}
171+
}
172+
return ans;
173+
}
77174
```
78175

79176
### **...**

solution/1300-1399/1333.Filter Restaurants by Vegan-Friendly, Price and Distance/README_EN.md

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,104 @@ After filter restaurants with veganFriendly = 1, maxPrice = 50 and maxDistance =
6060
### **Python3**
6161

6262
```python
63-
63+
class Solution:
64+
def filterRestaurants(
65+
self,
66+
restaurants: List[List[int]],
67+
veganFriendly: int,
68+
maxPrice: int,
69+
maxDistance: int,
70+
) -> List[int]:
71+
restaurants.sort(key=lambda x: (-x[1], -x[0]))
72+
ans = []
73+
for idx, _, vegan, price, dist in restaurants:
74+
if vegan >= veganFriendly and price <= maxPrice and dist <= maxDistance:
75+
ans.append(idx)
76+
return ans
6477
```
6578

6679
### **Java**
6780

6881
```java
82+
class Solution {
83+
public List<Integer> filterRestaurants(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {
84+
Arrays.sort(restaurants, (a, b) -> a[1] == b[1] ? b[0] - a[0] : b[1] - a[1]);
85+
List<Integer> ans = new ArrayList<>();
86+
for (int[] r : restaurants) {
87+
if (r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance) {
88+
ans.add(r[0]);
89+
}
90+
}
91+
return ans;
92+
}
93+
}
94+
```
95+
96+
### **C++**
97+
98+
```cpp
99+
class Solution {
100+
public:
101+
vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) {
102+
sort(restaurants.begin(), restaurants.end(), [](const vector<int>& a, const vector<int>& b) {
103+
if (a[1] != b[1]) {
104+
return a[1] > b[1];
105+
}
106+
return a[0] > b[0];
107+
});
108+
vector<int> ans;
109+
for (auto& r : restaurants) {
110+
if (r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance) {
111+
ans.push_back(r[0]);
112+
}
113+
}
114+
return ans;
115+
}
116+
};
117+
```
118+
119+
### **Go**
120+
121+
```go
122+
func filterRestaurants(restaurants [][]int, veganFriendly int, maxPrice int, maxDistance int) (ans []int) {
123+
sort.Slice(restaurants, func(i, j int) bool {
124+
a, b := restaurants[i], restaurants[j]
125+
if a[1] != b[1] {
126+
return a[1] > b[1]
127+
}
128+
return a[0] > b[0]
129+
})
130+
for _, r := range restaurants {
131+
if r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance {
132+
ans = append(ans, r[0])
133+
}
134+
}
135+
return
136+
}
137+
```
69138

139+
### **TypeScript**
140+
141+
```ts
142+
function filterRestaurants(
143+
restaurants: number[][],
144+
veganFriendly: number,
145+
maxPrice: number,
146+
maxDistance: number,
147+
): number[] {
148+
restaurants.sort((a, b) => (a[1] === b[1] ? b[0] - a[0] : b[1] - a[1]));
149+
const ans: number[] = [];
150+
for (const [id, _, vegan, price, distance] of restaurants) {
151+
if (
152+
vegan >= veganFriendly &&
153+
price <= maxPrice &&
154+
distance <= maxDistance
155+
) {
156+
ans.push(id);
157+
}
158+
}
159+
return ans;
160+
}
70161
```
71162

72163
### **...**
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) {
4+
sort(restaurants.begin(), restaurants.end(), [](const vector<int>& a, const vector<int>& b) {
5+
if (a[1] != b[1]) {
6+
return a[1] > b[1];
7+
}
8+
return a[0] > b[0];
9+
});
10+
vector<int> ans;
11+
for (auto& r : restaurants) {
12+
if (r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance) {
13+
ans.push_back(r[0]);
14+
}
15+
}
16+
return ans;
17+
}
18+
};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
func filterRestaurants(restaurants [][]int, veganFriendly int, maxPrice int, maxDistance int) (ans []int) {
2+
sort.Slice(restaurants, func(i, j int) bool {
3+
a, b := restaurants[i], restaurants[j]
4+
if a[1] != b[1] {
5+
return a[1] > b[1]
6+
}
7+
return a[0] > b[0]
8+
})
9+
for _, r := range restaurants {
10+
if r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance {
11+
ans = append(ans, r[0])
12+
}
13+
}
14+
return
15+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
public List<Integer> filterRestaurants(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {
3+
Arrays.sort(restaurants, (a, b) -> a[1] == b[1] ? b[0] - a[0] : b[1] - a[1]);
4+
List<Integer> ans = new ArrayList<>();
5+
for (int[] r : restaurants) {
6+
if (r[2] >= veganFriendly && r[3] <= maxPrice && r[4] <= maxDistance) {
7+
ans.add(r[0]);
8+
}
9+
}
10+
return ans;
11+
}
12+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def filterRestaurants(
3+
self,
4+
restaurants: List[List[int]],
5+
veganFriendly: int,
6+
maxPrice: int,
7+
maxDistance: int,
8+
) -> List[int]:
9+
restaurants.sort(key=lambda x: (-x[1], -x[0]))
10+
ans = []
11+
for idx, _, vegan, price, dist in restaurants:
12+
if vegan >= veganFriendly and price <= maxPrice and dist <= maxDistance:
13+
ans.append(idx)
14+
return ans
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function filterRestaurants(
2+
restaurants: number[][],
3+
veganFriendly: number,
4+
maxPrice: number,
5+
maxDistance: number,
6+
): number[] {
7+
restaurants.sort((a, b) => (a[1] === b[1] ? b[0] - a[0] : b[1] - a[1]));
8+
const ans: number[] = [];
9+
for (const [id, _, vegan, price, distance] of restaurants) {
10+
if (
11+
vegan >= veganFriendly &&
12+
price <= maxPrice &&
13+
distance <= maxDistance
14+
) {
15+
ans.push(id);
16+
}
17+
}
18+
return ans;
19+
}

0 commit comments

Comments
 (0)