最小连续的数组和的数组长度(蓝桥杯练习3)

蓝桥杯练习3

力扣207:最小数组和。给你一个数组,和一个目标值target 。求出最小连续的数组之和大于目标值的数组长度。

暴力解法:就是两层遍历,第一遍将数组的数据依次访问,第二次遍历则是在第一次遍历的数据上,继续遍历数组,累加和,再判断。

难点:数组长度的返回,利用三元运算符或者java API。注意,每次遍历时必须把总和归为0。

//也可以调用min方法
result = Math.min(result ,j - i + 1);

练习目的:掌握数组的访问和返回。

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        // 暴力解法:两层遍历数据
        // 1.定义变量,总和,数组长度,放回值
        int sum = 0;
        int count = 0;
        int result = Integer.MAX_VALUE;
        for(int i = 0; i<nums.length;i++) {
            sum = 0;// 每次要置0
            // 2.第二层遍历,将数据加起来直至大于target
            for(int j = i;j<nums.length;j++) {
                sum += nums[j];
                // 3. 判断条件是否成立
                if(sum >= target) {
                    count = j - i + 1;
                    result = result < count ? result : count;
                    break;
                }
            }
        }
        return result = result < Integer.MAX_VALUE ? result : 0 ;
    }
}

优化解法: 定值移动

思考方向:将目标值作为一个整体拆解到数组中,第二次遍历数组是否可以简化,对于两层遍历,可以考虑双指针法。

起始位置,终止位置

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        // 优化解法,窗口滑动,将target 作为一个数组整体逐一移动
        // 1. 定义变量,其中j起到关键作用
        int j = 0;
        int sum = 0;
        int result = Integer.MAX_VALUE;;
        int min = 0;
        // 2. 第一次遍历就计算出target的值
        for(int i = 0; i < nums.length; i++) {
            sum += nums[i];
            // 3.满足后,就将窗口后移动。j++
            while(sum >= target) {
                min = i - j + 1;
                result = result < min ? result : min;
                sum -= nums[j++];
            } 
        }
        // 4. 返回值
        return result = result < Integer.MAX_VALUE ? result : 0;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值