日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

862. 和至少为 K 的最短子数组

發(fā)布時間:2023/11/29 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 862. 和至少为 K 的最短子数组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

862. 和至少為 K 的最短子數(shù)組

返回 A 的最短的非空連續(xù)子數(shù)組的長度,該子數(shù)組的和至少為 K 。

如果沒有和至少為 K 的非空子數(shù)組,返回 -1 。

  • 示例 1:

輸入:A = [1], K = 1
輸出:1

  • 示例 2:

輸入:A = [1,2], K = 4
輸出:-1

  • 示例 3:

輸入:A = [2,-1,2], K = 3
輸出:3

提示:

  • 1 <= A.length <= 50000
  • -10 ^ 5 <= A[i] <= 10 ^ 5
  • 1 <= K <= 10 ^ 9

解題思路

  • 對于新加入的y,前面的P[x]都要比新加入的P[y]要小,比P[y]大的P[?]都要pop掉,甚至如果都比P[y]大,整個隊列都要清空。為什么?
  • 因為對于當前y來說,必須滿足P[y]-P[x]>=K,k又必然是正數(shù),所以p[y]必須大于p[x]。對于y后面的y2來說,即使?jié)M足P[y2]-P[x]>=K,[x,y2]之間也不是最短的,因為p[y]<p[x],所以必然滿足P[y2]-P[y]>=K,y比x更加接近y2,生成的長度更短,所以x可以直接pop掉,對答案不會產(chǎn)生影響

  • 為什么當隊列里第一個x滿足P[y]-P[x]>=K的時候,第一個x可以被pop掉?
  • 因為此時我們構成了一個P[y]-P[x]>=K,這個y已經(jīng)是最接近x的了,即長度最短,后面即使還能滿足P[y]-P[x]>=K,長度也不夠當前長度短

    代碼

    class Solution {public int shortestSubarray(int[] nums, int k) {int n=nums.length,res=n+1;LinkedList<Integer> list=new LinkedList<>();long[] pre=new long[n+1];for(int i=1;i<=n;i++)pre[i]=pre[i-1]+(long)nums[i-1];for(int i=0;i<n+1;i++){while(!list.isEmpty()&&pre[i]<pre[list.getLast()])list.removeLast();while(!list.isEmpty()&&pre[i]-pre[list.getFirst()]>=k){res=Math.min(res,i-list.removeFirst());}list.add(i);}return res==n+1?-1:res;}}

    總結

    以上是生活随笔為你收集整理的862. 和至少为 K 的最短子数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。