美文网首页
餐厅过滤器问题

餐厅过滤器问题

作者: 多喝热开水 | 来源:发表于2020-05-27 15:30 被阅读0次

    继续没事刷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 的过滤条件下,应该考虑所有餐馆。
    

    终于遇到了个感觉上很简单的题目了,关键是它的标注还是道 难度中等的题目

    image.png
    这不给他刷了高兴一下先
    先分析一波:
    其实题目本身很简单,就是过滤器,先过滤是否素食,然后过滤价格和距离,最后再排序啊,兄弟们,被打击的自信终于可以找回来了!
    直接上代码: 兄弟们,继续老样子,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

    相关文章

      网友评论

          本文标题:餐厅过滤器问题

          本文链接:https://www.haomeiwen.com/subject/bkbwahtx.html