作者JIWP (神楽めあ的錢包)
看板Marginalman
標題Re: [閒聊] 每日leetcode
時間Tue Oct 22 22:48:09 2024
1695. Maximum Erasure Value
給一個正整數矩陣nums
想要找到一個subarray該subarray所包含的元素都是唯一的
nums會包含一個或多個這種subarray
請回傳所有元素相加後總和最大的subarray
思路:
標準的two pointer題目
就一路從頭加到尾(sum)
用hash table記錄每一個數字出前一次出現的index
當遇到重複的數字時
先比較目前的最大值和sum誰比較大
接著從左指標開始從sum扣掉直到該數字前一次出現的位置
中間記得把hash table裡每個數字前一次出現的位置更新
這樣應該就可以得到答案了
golang code :
func maximumUniqueSubarray(nums []int) int {
rec := make(map[int]int)
first_idx, n, ans, sum := 0, len(nums), 0, 0
for i := 0; i < n; i++ {
if rec[nums[i]] == 0 {
sum += nums[i]
rec[nums[i]] = i + 1
} else {
ans = max(ans, sum)
tmp := rec[nums[i]]
for first_idx != tmp {
sum -= nums[first_idx]
rec[nums[first_idx]] = 0
first_idx++
}
i--
}
}
return max(sum, ans)
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.213.161 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1729608491.A.FFC.html