作者JIWP (神楽めあ的錢包)
看板Marginalman
標題Re: [閒聊] 每日leetcode
時間Tue Nov 12 23:27:59 2024
2070. Most Beautiful Item for Each Query
給一個二為矩陣 items,其中items[i]=[price_i,beauty_i]
再給一個queries矩陣
請回傳一個answer矩陣
其中answer[i]是items矩陣裡price小等於queries[i]的所有組合中最大beauty值
思路:
先將items依照price的大小排序
接著建立一個array
array[i]表示從0~i個item裡最大的beauty值
接著對item用二分搜法找query[i]
假設得到的位置是j
再檢查item[j][0]是否大於query[i]
是 : answer[i]=array[j-1]
否 : answer[i]=array[j]
golang code:
func maximumBeauty(items [][]int, queries []int) []int {
n := len(items)
slices.SortFunc(items, func(a, b []int) int {
if a[0] == b[0] {
return b[1] - a[1]
}
return a[0] - b[0]
})
arr, ans := make([]int, n), make([]int, len(queries))
max_num := 0
for i := 0; i < n; i++ {
max_num = max(max_num, items[i][1])
arr[i] = max_num
}
for key, val := range queries {
if val < items[0][0] {
ans[key] = 0
continue
}
idx := bs(items, val)
if items[idx][0] <= val {
ans[key] = arr[idx]
} else {
ans[key] = arr[idx-1]
}
}
return ans
}
func bs(item [][]int, target int) int {
l, r := 0, len(item)-1
for r > l {
m := l + (r-l)/2
if target > item[m][0] {
l = m + 1
} else {
r = m
}
}
return l
}
就可以得到答案了
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.211.250 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1731425282.A.F0D.html