餐厅过滤器问题
继续没事刷leetcode ,是时候到了培养自信的时候了,终于遇到了一个简单的算法问题
看到这么个题目:
餐厅过滤器
给你一个餐馆信息数组 restaurants,其中 restaurants[i] = [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息。
其中素食者友好过滤器 veganFriendly 的值可以为 true 或者 false,如果为 true 就意味着你应该只包括 veganFriendlyi 为 true 的餐馆,为 false 则意味着可以包括任何餐馆。此外,我们还有最大价格 maxPrice 和最大距离 maxDistance 两个过滤器,它们分别考虑餐厅的价格因素和距离因素的最大值。
过滤后返回餐馆的 id,按照 rating 从高到低排序。如果 rating 相同,那么按 id 从高到低排序。简单起见, veganFriendlyi 和 veganFriendly 为 true 时取值为 1,为 false 时,取值为 0 。
示例 1:
输入:restaurants = [[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
输出:[3,1,5]
解释:
这些餐馆为:
餐馆 1 [id=1, rating=4, veganFriendly=1, price=40, distance=10]
餐馆 2 [id=2, rating=8, veganFriendly=0, price=50, distance=5]
餐馆 3 [id=3, rating=8, veganFriendly=1, price=30, distance=4]
餐馆 4 [id=4, rating=10, veganFriendly=0, price=10, distance=3]
餐馆 5 [id=5, rating=1, veganFriendly=1, price=15, distance=1]
在按照 veganFriendly = 1, maxPrice = 50 和 maxDistance = 10 进行过滤后,我们得到了餐馆 3, 餐馆 1 和 餐馆 5(按评分从高到低排序)。
示例 2:
输入:restaurants = [[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
输出:[4,3,2,1,5]
解释:餐馆与示例 1 相同,但在 veganFriendly = 0 的过滤条件下,应该考虑所有餐馆。
终于遇到了个感觉上很简单的题目了,关键是它的标注还是道 难度中等的题目
这不给他刷了高兴一下先
先分析一波:
其实题目本身很简单,就是过滤器,先过滤是否素食,然后过滤价格和距离,最后再排序啊,兄弟们,被打击的自信终于可以找回来了!
直接上代码: 兄弟们,继续老样子,leetcode 没有OC啊,果断还是先用JS代替下
var filterRestaurants = function(restaurants, veganFriendly, maxPrice, maxDistance) {
let result = restaurants;
// 先过滤素食者
if (veganFriendly) {
result = restaurants.filter(function(n) {
if (n[2] == true) {
return true;
}
return false;
});
}
// 过滤价格和距离
result = result.filter(function(n) {
let flag = false;
if (n[3] <= maxPrice && n[4] <= maxDistance) {
return true;
}
return false;
});
// 开始排序 先rating 高到低 相同则id高到低
result.sort(function(a,b){
// 降序排列
if (b[1] != a[1]) {
return b[1]-a[1]; //升序
}
return b[0]-a[0]; // 升序
});
// 最后再把餐厅的id展示出来
var retsultId = result.map(function(x){
return x[0];
});
return retsultId;
};
一通操作成功完成,点击提交看看:
image.png
完美,这道题目很简单啊,感觉配不上他上面显示的难度,感觉是个简单的题目。
做完了之后常规反思一下啊,不对劲啊,这感觉像是有优化的空间啊,
1.过滤素食者
2.过滤价格和距离
3.开始排序 先rating 高到低 相同则id高到低
4.展示餐厅的id
感觉上 1,2 可以合并一起过滤,简单合并后再来:
var filterRestaurants = function(restaurants, veganFriendly, maxPrice, maxDistance) {
let result = restaurants;
// 过滤素食者 价格和距离
var result = restaurants.filter(item => {
return (item[2] == veganFriendly || veganFriendly == 0) && (item[3] <= maxPrice) && (item[4] <= maxDistance);
});
// 开始排序 先rating 高到低 相同则id高到低
result.sort(function(a,b){
// 降序排列
if (b[1] != a[1]) {
return b[1]-a[1]; //升序
}
return b[0]-a[0];
});
var retsultId = result.map(function(x){
return x[0];
});
return retsultId;
};
好了,大致上就是这样解决一个简单的过滤器问题。
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/filter-restaurants-by-vegan-friendly-price-and-distance