LeetCode小解析 1333 餐廳過濾器

2021-10-23 14:27:03 字數 3225 閱讀 3804

給你乙個餐館資訊陣列restaurants,其中restaurants[i] = [idi, ratingi, veganfriendlyi, pricei, distancei]。你必須使用以下三個過濾器來過濾這些餐館資訊。

其中素食者友好過濾器veganfriendly的值可以為true或者false,如果為 true 就意味著你應該只包括veganfriendlyi為 true 的餐館,為 false 則意味著可以包括任何餐館。此外,我們還有最大**maxprice和最大距離maxdistance兩個過濾器,它們分別考慮餐廳的**因素和距離因素的最大值。

過濾後返回餐館的id,按照rating從高到低排序。如果rating相同,那麼按id從高到低排序。簡單起見,veganfriendlyiveganfriendly為 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 的過濾條件下,應該考慮所有餐館。

示例 3:

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

題目並不算難,我們要做的就是遍歷並找出滿足這些條件的餐廳

我們遍歷restaurants這個二維陣列並且每個遍歷到的一維陣列設為restaurant

(veganfriendly ==0||

(veganfriendly + restaurant[2]

==2))

&& restaurant[3]

<= maxprice

&& restaurant[4]

<= maxdistance

餐廳的最大**要小於引數給出的最大**。

我們把滿足如上條件的一維陣列都存起來,我用的是arraylist來存的,所以上一步是比較簡單的;困難的地方主要是排序。這裡我們呼叫arraylistsort方法,這個方法需要我們傳入乙個comparator匿名類。首先我們根據rating(即restaurant[1])來排序,如果rating相同,那麼我們就使用id(即restaurant[0])來排序。那麼我們的comparator可以寫成

new

comparator

<

int[

]>()

else

}}

使用lamda表示式的話就是

(o1, o2)

->

else

}

public list

filterrestaurants

(int

restaurants,

int veganfriendly,

int maxprice,

int maxdistance)

}//排序

reslist.

sort

((o1, o2)

->

else})

; list

res =

newarraylist

<

>()

;//遍歷獲得id

for(

int[

] i :

reslist)

return res;

}

(8月20日成績)

程序和執行緒小解析

程序是作業系統進行資源分配的單位。執行緒是cpu任務排程的基本單元。至於程式和程序的區別?程式是死的 用我老師的話來說就是相當於程序的屍體,不可被執行或排程,以檔案形式存在於系統中。而程序則是活的程式,是可以被系統執行和排程的。程序的五大狀態 建立 建立程序 就緒 建立完畢,等待cpu排程 執行 正...

vc助手整合問題小解析

最近,又是想搞驅動,又是64位os移植,一頭包。發現了visaul assist 與 ds之間的衝突問題,現和大家一起分享,如有不對請斧正。我安裝的visual assist 是1626以後版本的,聽說只有這些版本支援vs2005 vs2008,安裝一路順風 如果你沒有安裝ds,如果安裝了ds,估計...

leetCode題目解析

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原...