2021-02-28:给定一个整型数组arr,和一个整数num。某个arr中的子数组sub,如果想达
2021-02-28 22:22
344 查看
2021-02-28:给定一个整型数组arr,和一个整数num。某个arr中的子数组sub,如果想达标,必须满足:sub中最大值 – sub中最小值 <= num,返回arr中达标子数组的数量。
福哥答案2021-02-28:
采用两个双端队列,存序号。maxWindow从大到小,minWindow从小到大。
1.两个双端队列同时右扩。当最大值-最小值大于sum,退出循环。
2.计数。
3.删除双端队列左边的过期序号。
有代码。
代码用golang编写,代码如下:
package main import ( "container/list" "fmt" ) func main() { arr := []int{1, 2} sum := 6 ret := num(arr, sum) fmt.Println(ret) } func num(arr []int, sum int) int { arrLen := len(arr) if arrLen == 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[maxWindow.Back().Value.(int)] <= arr[R] { maxWindow.Remove(maxWindow.Back()) } maxWindow.PushBack(R) //右扩 for minWindow.Len() > 0 && arr[minWindow.Back().Value.(int)] >= arr[R] { minWindow.Remove(minWindow.Back()) } minWindow.PushBack(R) //如果最大值-最小值>sum,就不右扩了。 if arr[maxWindow.Front().Value.(int)]-arr[minWindow.Front().Value.(int)] > sum { break } else { R++ } } //计数 count += R - L //删除过期窗口数据 if maxWindow.Front().Value.(int) == L { maxWindow.Remove(maxWindow.Front()) } if minWindow.Front().Value.(int) == L { minWindow.Remove(minWindow.Front()) } } return count }
执行结果如下:
相关文章推荐
- (python)给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数。
- 二分查找(给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。)
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(1)
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)
- python练习题---给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
- 给定一个无序的整型数组arr,找到其中最小的k个数。
- (java)哈希表 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)
- 如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值
- 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(1)
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)
- 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
- java每日一题:给定一个整数数组arr和整数target,返回两个索引值,使得这两个索引值对应的整数的和等于target。(arr中有且仅有一组)
- 如何在一堆正整数中(数组arr)找出与给定正整数(num)最接近的那个数(result)
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)
- 1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍
- 给定一个无序整型数组,找出数组中未出现的最小整数
- 2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每