给定一个数组 nums 和一个正整数 target , 找出满足和大于等于 target 的长度最短的连续子数组并返回其长度,如果不存在这种子数组则返回 0。
数据范围:数组长度满足 ,数组中的元素满足 ,
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; } };
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @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; }