2021-02-28:给定一个整型数组arr,和一个整数num。某个arr中的子数组sub,如果想达

2021-02-28:给定一个整型数组arr,和一个整数num。某个arr中的子数组sub,如果想达标,必须满足:sub中最大值 – sub中最小值 <= num,返回arr中达标子数组的数量。

福哥答案2021-0202壁纸-28:

采用两个双端队列,存序号。maxWi整数的概念是什么ndow从大到小,minWindow从小到大。
1.两个双端队列同时右扩。当最大值-最小值大于sum,退数组词三声出循环。
2.计数。
3.02壁纸删除双端队列左边的过期序号。
有代码。

代码用golang编写,代码如下:

package maiarcaean
import (
"container整数/list"
"fmt"
)
func main() {
arr :2021年牛年吉祥话= []int{1, 2}
sum := 6
ret := num(arr, sum)
fmt整数包括什么.Println(ret)
}
func num(arr []int, sum int)整数是什么 int {
arrLen := len(arr)
if a爱人错过rrLen == 0 || sum < 0 {
return 0
}
count := 0
maxWindow := list.New().Init()
minWindow := list.New().Init()
R := 0
for L := 0; L < arrLen; L++ {
for R < arrLen {
//右扩
for maxWindow.Len() > 0 && arr[maxW数组词三声indow.Back().Value.(int)] <= arr[R] {
maxWindow.Remove(maxWindow.Back())
}
maxWindow.Push数组词多音字组词语Back(R)
//右扩
for minWindow.Len() > 0 &20;& arr[minWindow.Back().Value数组词三声.(i020开头的是什么电话nt)] >=argue arr[R] {
min数组公式Window.Remove(minWindo整数除以分数的计算方法w.Back())
}
minWargueindow.PushBack(R)
//如果最大值02壁纸-最数组去重小值>sum,就不右扩了。
if arr[02壁纸maxWindow.Front().Value.(int)]-arr[minWindow.Front()2021春晚.Value.(int)] > sum {
break
} else {
R++
}
}
//计数
count += R - L
//删除过期窗口数据
if maxWin安如初莫琛dow.Front().Value.(int) == L {
maxWindow.Remove(2021年牛年吉祥话maxWindow.Front2021年日历())
}
if minWindow.Front().Value数组排序.数组的定义(int) == L {
minWindow.Remove(min数组去重Window.Front())
}
}
return count
}

执行结果如下:


左神java代码
评论