Re: [閒聊] 每日leetcode

看板Marginalman作者 (神楽めあ的錢包)時間4月前 (2025/08/02 17:23), 編輯推噓1(101)
留言2則, 2人參與, 4月前最新討論串1489/1548 (看更多)
2561. Rearranging Fruits 思路: 用一個map紀錄每個cost的數量, 如果再basket1就+1反之就-1 並紀錄最小的cost : minCost 每個cost的數量應該是偶數 如果是奇數就回傳-1 再來用一個array來放要交換的cost 把每個cost在map中紀錄的數量/2放到array裡 假設2有4個, 那只要把2個2放到array就好 把array進行排列, 因為是求最小cost 所以只要對array的前一半進行計算 如果array[i] < minCost*2, 答案就加上array[i] 反之就加上minCost*2 會這麼計算是因為 如果我要交換costA、costB, 有兩種方法 第1種是 costA、costB直接互換 , 這樣cost會是min(costA,costB) 第2種是 costA跟minCost互換、costB再跟minCost互換, 這樣cost是2*minCost golang code : func minCost(basket1 []int, basket2 []int) int64 { rec := make(map[int]int, 0) n, ans, minNum := len(basket1), 0, math.MaxInt64 for key := range basket1 { rec[basket1[key]]++ rec[basket2[key]]-- } arr := make([]int, 0, n) for num, val := range rec { tmp := abs(val) if tmp&1 == 1 { return -1 } minNum = min(minNum, num) for i := 0; i < tmp/2; i++ { arr = append(arr, num) } } slices.Sort(arr) for i := 0; i < len(arr)/2; i++ { if arr[i] > minNum*2 { ans += minNum * 2 } else { ans += arr[i] } } return int64(ans) } func abs(num int) int { if num > 0 { return num } return -num } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.215.96 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1754126634.A.B1D.html

08/02 17:24, 4月前 , 1F
求求別在卷了
08/02 17:24, 1F

08/02 17:25, 4月前 , 2F
我的每日不能斷
08/02 17:25, 2F
文章代碼(AID): #1eZTagiT (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1eZTagiT (Marginalman)