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 從高到低排序。簡單起見,veganFriendlyi
和 veganFriendly
爲 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,別直接返回原來的對象了。
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
的實例上有 filter
、sort
、map
方法,因此咱們也能夠寫成一行來實現。
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]);
總結就是,一臉懵逼。必定是小豬起牀的姿式不對,小豬先去重起一下...
加油武漢,天佑中華