【獨家焦點】LeetCode.209 長度最小的子數組

2023-01-10 18:28:51 來源:51CTO博客

1.題目


【資料圖】

給定一個含有n個正整數的數組和一個正整數 target 。

找出該數組中滿足其和 ≥ target 的長度最小的 連續子數組[numsl, numsl+1, ..., numsr-1, numsr] ,并返回其長度。如果不存在符合條件的子數組,返回 0

2.代碼實現

1.暴力求解

int min=Integer.MAX_VALUE;          for(int i=0; i=target){                  return 1;              }              int sum=nums[i];              for(int j=i+1; j=target){                    min = Math.min(min,j-i+1);                    break;                }              }          }          return min==Integer.MAX_VALUE?0:min;

此方法在力扣上會超出時間限制

2.滑動窗口

int left=0;          int sum=0;          int result = Integer.MAX_VALUE;          for(int right=0; right=target){                   result = Math.min(result,right-left+1);                   sum-=nums[left];                   left++;               }          }          return result==Integer.MAX_VALUE?0:result;

1.滑動窗口的思想:就是兩個指針,left表示窗口的左端開始,right表示窗口的右端結束,一開始是right一直往右移動,直到窗口之間的數之和大于等于target就會停止,記錄窗口的長度,然后就是left往右移動判斷和是否還是大于等于target,直到小于target就會停止,然后再移動right,由此反復,每次都會更新長度,最后result記錄的就是最小長度

2.result的初始值記錄為Integer.MAX_VALUE

Integer.MAX_VALUE表示int數據類型的最大取值數:2 147 483 647Integer.MIN_VALUE表示int數據類型的最小取值數:-2 147 483 648

3.最后的返回值也要判斷,判斷result是否賦值成功,不然的話就是整個數組之和都小于target,那么就會返回0

標簽: 數據類型 大于等于 時間限制

上一篇:sysbench服務器性能測試
下一篇:回饋式電子負載是什么意思(電子負載回饋的操作模式有哪些)