寶寶也能看懂的 leetcode 周賽 - 173 - 2

1333. 餐廳過濾器

Hi 你們好,我是張小豬。歡迎來到『寶寶也能看懂』系列之 leetcode 周賽題解。git

這裏是第 173 期的第 2 題,也是題目列表中的第 1333 題 -- 『餐廳過濾器』github

題目描述

給你一個餐館信息數組 restaurants,其中 restaurants[i] = [idi, ratingi, veganFriendlyi, pricei, distancei]。你必須使用如下三個過濾器來過濾這些餐館信息。shell

其中素食者友好過濾器 veganFriendly 的值能夠爲 true 或者 false,若是爲 true 就意味着你應該只包括 veganFriendlyi 爲 true 的餐館,爲 false 則意味着能夠包括任何餐館。此外,咱們還有最大價格 maxPrice 和最大距離 maxDistance 兩個過濾器,它們分別考慮餐廳的價格因素和距離因素的最大值。segmentfault

過濾後返回餐館的 id,按照 rating 從高到低排序。若是 rating 相同,那麼按 id 從高到低排序。簡單起見,veganFriendlyiveganFriendly 爲 true 時取值爲 1,爲 false 時,取值爲 0數組

示例 1:spa

輸入: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:rest

輸入: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 的過濾條件下,應該考慮全部餐館。

示例 3:code

輸入: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 = 30, maxDistance = 3
輸出:[4,5]

提示:對象

  • 1 <= restaurants.length <= 10^4
  • restaurants[i].length == 5
  • 1 <= idi, ratingi, pricei, distancei <= 10^5
  • 1 <= maxPrice, maxDistance <= 10^5
  • veganFriendlyi 和 veganFriendly 的值爲 0 或 1 。
  • 全部 idi 各不相同。

官方難度

MEDIUMblog

解決思路

說實話這道題讓小豬有點意外,由於題目內容就是單純的給定了原始數據、過濾條件、排序條件,而後須要返回結果。但是這不是一道 MEDIUM 難度的題麼,這一期的比賽到底是在鬧哪樣鴨...

沒什麼須要分析的,淦就完事了!

直接方案

好吧,仍是裝模做樣的寫一下流程吧。惟一須要注意的就是,最終返回的只須要數字 id,別直接返回原來的對象了。

  1. 根據條件篩選數據。
  2. 根據要求排序數據。
  3. 只返回題目需求的 id。
const filterRestaurants = (restaurants, veganFriendly, maxPrice, maxDistance) => {
  const filtered = [];
  for (const item of restaurants) {
    (veganFriendly === 0 || item[2] === veganFriendly)
    && item[3] <= maxPrice
    && item[4] <= maxDistance
    && filtered.push(item);
  }
  filtered.sort((a, b) => a[1] === b[1] ? b[0] - a[0] : b[1] - a[1]);
  const ret = new Uint32Array(filtered.length);
  for (let i = 0; i < filtered.length; ++i) {
    ret[i] = filtered[i][0];
  }
  return ret;
};

而後因爲 JS 中 Array 的實例上有 filtersortmap 方法,因此咱們也能夠寫成一行來實現。

const filterRestaurants = (restaurants, veganFriendly, maxPrice, maxDistance) => restaurants.filter(item => (veganFriendly === 0 || item[2] === veganFriendly) && item[3] <= maxPrice && item[4] <= maxDistance).sort((a, b) => a[1] === b[1] ? b[0] - a[0] : b[1] - a[1]).map(item => item[0]);

總結

總結就是,一臉懵逼。必定是小豬起牀的姿式不對,小豬先去重起一下...

加油武漢,天佑中華

相關連接

qrcode_green.jpeg

相關文章
相關標籤/搜索