世界已冷酷至极, 让我们携手前行。
自助收录

209. 长度最小的子数组(解法一:暴力算法)

算法刷题2年前 (2023)更新 江南白衣
367 0 0
209. 长度最小的子数组(解法一:暴力算法)

209. 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4]
输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
解析:
这道题目暴力解法是使用两个for循环,然后不断的寻找符合条件的子序列(注意:力扣当前更新了用例数据,此方法会导致超时)
1、优先判断不满足条件的情况,即所有元素之和小于target(示例3的情况)
2、定义最小长度,设置为最大值(Integer.MAX_VALUE)
3、写两个for循环,外层i从0开始,内层j从i开始,外层定义一个sum用来给内层循环求和
4、内层判断sum是否满足条件sum >= target,如果满足取minLength和本轮长度中的较小值
时间复杂度:O(n^2)
空间复杂度:O(1)

package com.codernav.demo.leetcode.array.minsubarraylen;

import java.util.Arrays;

/**
 * 209. 长度最小的子数组(暴力解法)
 * 给定一个含有n个正整数的数组和一个正整数target。
 * 找出该数组中满足其和 ≥ target的长度最小的连续子数组[numsl, numsl+1, ..., numsr-1, numsr],并返回其长度。如果不存在符合条件的子数组,返回0。
 * 原文地址:https://www.codernav.com/2893.html
 * 更多算法详解:https://www.codernav.com
 */
public class Q_209 {
    public static void main(String[] args) {
//      sout:2
        int[] nums = new int[]{2, 3, 1, 2, 4, 3};
        System.out.println(f(nums, 7));
//      sout:2
        int[] nums1 = new int[]{5, 1, 3, 5, 10, 7, 4, 9, 2, 8};
        System.out.println(f(nums1, 15));
//      sout:0
        int[] nums2 = new int[]{1, 1, 1, 1, 1, 1, 1, 1};
        System.out.println(f(nums2, 11));
    }

    private static int f(int[] nums, int target) {
        // 不满足条件
        if (Arrays.stream(nums).sum() < target) {
            return 0;
        }
        // 最小长度
        int minLength = Integer.MAX_VALUE;
        for (int i = 0; i < nums.length; i++) {
            // 子数组求和,直到找到和大于target的位置
            int sum = 0;
            for (int j = i; j < nums.length; j++) {
                sum = sum + nums[j];
                if (sum >= target) {
                    // 上一轮长度与本次循环长度比较,取较小的
                    minLength = Math.min(minLength, j - i + 1);
                    break;
                }
            }
        }
        return minLength;
    }
}

 

© 版权声明

相关文章

开发者导航新手教程

暂无评论

暂无评论...