leetcode 209.长度最小的子数组

题目:nums=[2,3,5,1,2,4,5,3,2],条件:找子数组:满足其元素的和>=12、元素连续、长度最小。

答案:[4,5,3],长度为3。

解法:双指针(滑动窗口):设两个指针i,j,开始指向第一个元素2,

[2(i,j),3,5,1,2,4,5,3,2] , 第1个子集合[2],和为2,比12小,i不动,j++。

[2(i),3(j),5,1,2,4,5,3,2],第2个子集合[2,3],和为5,比12小,i不动,j++。

[2(i),3,5(j),1,2,4,5,3,2],第3个子集合[2,3,5],和为10,比12小,i不动,j++。

[2(i),3,5,1(j),2,4,5,3,2],第4个子集合[2,3,5,1],和为11,比12小,i不动,j++。

[2(i),3,5,1,2(j),4,5,3,2],第5个子集合[2,3,5,1,2],和为13,比12大,j不动,i++,记录出现符合条件的子集合的长度number为5。

[2,3(i),5,1,2(j),4,5,3,2],第6个子集合[3,5,1,2],和为13-2=11,比12小,i不动,j++。

[2,3(i),5,1,2,4(j),5,3,2],第7个子集合[3,5,1,2,4],和为15,比12大,j不动,i++。

[2,3,5(i),1,2,4(j),5,3,2],第8个子集合[5,1,2,4],和为15-3=12,满足12,j不动,i++,number更新为4。

[2,3,5,1(i),2,4(j),5,3,2],第9个子集合[1,2,4],和为12-5=7,比12小,i不动,j++。

[2,3,5,1(i),2,4,5(j),3,2],第10个子集合[1,2,4,5],和为12,满足12,j不动,i++.

[2,3,5,1,2(i),4,5(j),3,2],第11个子集合[2,4,5],和为11,比12小,i不动,j++。

[2,3,5,1,2(i),4,5,3(j),2],第12个子集合[2,4,5,3],和为14,比12大,j不动,i++。

[2,3,5,1,2,4(i),5,3(j),2],第13个子集合[4,5,3],和为14-2=12,满足12,j不动,i++,number更新为3。

[2,3,5,1,2,4,5(i),3(j),2],第14个子集合[5,3],和为12-4=8,比12小,i不动,j++。

[2,3,5,1,2,4,5(i),3,2(j)],第15个子集合[5,3,2],和为10,比12小,i不动,j++后指向null.结束寻找.

java代码

 public static int minSubArrayLen(int target, int[] nums) {
        if(nums==null || nums.length==0){
            return 0;
        }
        int i=0;
        int j=0;//两个指针
        int number = nums.length+1;//用于更新子集合最小长度,初始为数组长度+1
        int count = 0; //计元素之和
        while (j<=nums.length-1) {
            count+=nums[j];
            j++;
            while (count>=target){
                number = Math.min(number,j-i);//两者取最小
                count-=nums[i];
                i++;
            }
        }
        return number == nums.length+1 ? 0 : number;
    }

测试:

@Test
    public void test3(){
        int[] a = {2,3,5,1,2,4,5,3,2};
        System.out.println(minSubArrayLen(12, a));
    }

结果

3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值