循环调用一个函数,然后进行匹配如果奇数满k个累加,想着暴力法美滋滋,然后去提交了,报了超时,我看了他的测试用例(见截图)
func numberOfSubarrays(nums []int, k int) int {
if len(nums)==0{
return 0
}
sum:=0
h:=k
for{
sum += gun(h,k,nums)
h++
}
return sum}
func gun(n,k int, nums []int) int{
sum:=0
for i:=0;i<=len(nums)-n;i++{
count:=0
for j:=0;j<n;j++{
if nums[i+j]%2!=0{
count++
}
}
if count==k{
sum++
}
}
return sum
}
好吧,怪我年轻不懂事,换解法。
func numberOfSubarrays(nums []int, k int) int {
if len(nums)==0{
return 0
}
var oddSlice []int
for i:=0;i<len(nums);i++{ //获取奇数下标
if nums[i]%2==1{
oddSlice=append(oddSlice,i)
}
}
left :=0
right :=0
sum :=0
leftIndex:=0
rightIndex:=k-1
for ;rightIndex<=len(oddSlice)-1;{
fmt.Println("rightIndex",rightIndex)
if leftIndex==0{
left=oddSlice[leftIndex]
}else{
left=oddSlice[leftIndex]-oddSlice[leftIndex-1]-1
}
if rightIndex==(len(oddSlice)-1){
right=len(nums)-oddSlice[rightIndex]-1
}else{
right=oddSlice[rightIndex+1]-oddSlice[rightIndex]-1
}
sum+=(left+1)*(right+1)
leftIndex++
rightIndex++
}
return sum
}
找到规律 种类 数等于(左边偶数+1)*(右边偶数+1)