題目
日期
2025/09/17
困惑點
在 LeetCode 的 Swift 語言看起來可以用 swift-collection 的 Heap 。但是不確定是用了哪個版本,用了 removeAll 會報錯說找不到這個方法,但是在 Xcode 裡面卻能夠執行。
程式碼
import Collections
class FoodRatings {
var cuisineHeaps: [String: Heap<Food>] = [:]
var foodToCuisine: [String: String] = [:]
var foodToRating: [String: Int] = [:]
init(_ foods: [String], _ cuisines: [String], _ ratings: [Int]) {
for i in foods.indices {
let ratedFood = Food(food: foods[i], rating: ratings[i])
cuisineHeaps[cuisines[i], default: Heap()].insert(ratedFood)
foodToCuisine[foods[i]] = cuisines[i]
foodToRating[foods[i]] = ratings[i]
}
}
func changeRating(_ food: String, _ newRating: Int) {
guard let cuisine = foodToCuisine[food] else { return }
let ratedFood = Food(food: food, rating: newRating)
cuisineHeaps[cuisine]?.removeAll { $0.food == food }
cuisineHeaps[cuisine]?.insert(ratedFood)
foodToRating[food] = newRating
}
func highestRated(_ cuisine: String) -> String {
cuisineHeaps[cuisine]?.max?.food ?? ""
}
}
struct Food: Comparable {
let food: String
let rating: Int
static func < (lhs: Food, rhs: Food) -> Bool {
if lhs.rating == rhs.rating {
return lhs.food > rhs.food
} else {
return lhs.rating < rhs.rating
}
}
}