给定一个数组 nums 和一个正整数 target , 找出满足和大于等于 target 的长度最短的连续子数组并返回其长度,如果不存在这种子数组则返回 0。
数据范围:数组长度满足
,数组中的元素满足
, 
public static int minSubarray(int[] nums, int target) {
// 使用滑动窗口
int left = 0, right = 0, currRes = 0, res = Integer.MAX_VALUE;
while (right < nums.length) {
currRes += nums[right];
while (currRes >= target) {
res = Math.min(res, right - left + 1);
currRes -= nums[left];
left++;
}
right++;
}
return res == Integer.MAX_VALUE ? 0 : res;
} class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param target int整型
* @return int整型
*/
int minSubarray(vector<int>& nums, int target) {
// write code here
int left = 0, right = 0, sum = 0, minLen = nums.size();
while(right < nums.size()){
sum += nums[right++];
while(left < right && sum >= target){
minLen = min(minLen, right - left);
sum -= nums[left++];
}
}
return minLen;
}
}; 滑
class Solution:
def minSubarray(self, nums: List[int], target: int) -> int:
# write code here
min_len = 1000000
i = 0
j = -1
sum = 0
while j < len(nums):
if sum < target:
j += 1
if j == len(nums): break
sum += nums[j]
else:
min_len = min(min_len, j - i + 1)
sum -= nums[i]
if i == j:
i += 1
j += 1
else:
i += 1
return 0 if min_len == 100000 else min_len
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param nums int整型一维数组 # @param target int整型 # @return int整型 # class Solution: def minSubarray(self , nums: List[int], target: int) -> int: # write code here left = 0 right = 0 sum = 0 min_len = len(nums) found = False # 采用左闭右开的方式 while left < len(nums): # sum不够则伸长 if sum < target: if right < len(nums): sum += nums[right] right += 1 else: break # 查看值并开始缩减长度 else: found = True min_len = min(min_len, right - left) sum -= nums[left] left += 1 if found: return min_len else: return 0
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param target int整型
* @return int整型
*/
public int minSubarray (int[] nums, int target) {
// write code here
if(nums.length==0){
return -1;
}
ArrayList<Integer> maxArr=new ArrayList<>();
for(int i=0;i<nums.length;i++){
int sum=0;
int size=0;
for(int j=i;j<nums.length;j++){
if(sum<target){
sum+=nums[j];
size++;
}
if(sum>=target){
maxArr.add(size);
break;
}
}
}
int length=Collections.min(maxArr);
return length;
}
} package main
import _"fmt"
import "math"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param target int整型
* @return int整型
*/
func minSubarray( nums []int , target int ) int {
ans:=math.MaxInt32
sum:=0
var l,r int
for i,x:=range nums{
if sum+x<target{
sum+=x
}else{
r=i
break
}
}
for ;r<len(nums);r++{
sum+=nums[r]
for sum>=target{
if r-l+1<ans{
ans=r-l+1
}
sum-=nums[l]
l++
}
}
if ans==math.MaxInt32{
return 0
}
return ans
} class Solution: def minSubarray(self , nums: List[int], target: int) -> int: # write code here n = [] for i in range(len(nums)): sumn = 0 for j in range(i,len(nums)): if sumn < target : sumn += nums[j] if sumn >= target : n.append(j + 1 - i) break return(min(n))
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param target int整型
* @return int整型
*/
int minSubarray(vector<int>& nums, int target)
{
// write code here
int start=0, end=0;
int arrlen=INT_MAX, sum=0;
while(end<nums.size())
{
sum+=nums[end];
while(sum>=target)
{
arrlen=min(arrlen, end-start+1);
sum-=nums[start++];
}
end++;
}
return arrlen==INT_MAX?0:arrlen;
}
}; // 考虑用滑动窗口处理很快!
public int minSubarray (int[] nums, int target) {
int left = 0, right = 0, sum = 0, min = nums.length;
while (right < nums.length) {
int in = nums[right];
right++;
sum += in;
while (sum >= target) {
min = Math.min(min, right - left);
int out = nums[left];
left++;
sum -= out;
}
}
return min == nums.length ? 0 : min;
}