Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2024-03-14 18:47:06
※ 引述《Rushia (みけねこ的鼻屎)》之铭言:
: https://leetcode.com/problems/binary-subarrays-with-sum/
: 930. Binary Subarrays With Sum
: 给你一个包含0和1的阵列nums和一个数字goal,找出所有相加为goal的子阵列数量。
思路 :
(1)
sum为到i为止所有元素的总和,当sum==goal,ans++
用hash table,纪录之前出现过的值,去找sum-goal之前出现过几次,并加到ans
(2) sliding windows
设计一个function,可以找出一个array里所有总和小于特定值的subarray
接着去找小于goal的subarray个数以及小于goal-1的subarray个数
两个相减就是总和为goal的subarray的个数
golang code :
func numSubarraysWithSum(nums []int, goal int) int {
return count(nums,goal)-count(nums,goal-1)
}
func count(nums []int,goal int)int{
sum:=0
ans:=0
l:=0
for r:=0;r<len(nums);r++{
sum+=nums[r]
for r>=l && sum>goal{
sum-=nums[l]
l++
}
ans+=r-l+1
}
return ans
}
作者: sustainer123 (caster)   2024-03-14 18:57:00
大师 我一直没想出slidingwindow

Links booklink

Contact Us: admin [ a t ] ucptt.com