zoukankan      html  css  js  c++  java
  • 和大于S的最小子数组 · Minimum Size Subarray Sum

    [抄题]:

    给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组。如果无解,则返回 -1。

    给定数组 [2,3,1,2,4,3] 和 s = 7, 子数组 [4,3] 是该条件下的最小长度子数组。

     [暴力解法]:

    时间分析:

    空间分析:

    [思维问题]:

    1. 和 ≥ s 的最小长度子数组,和《s时j++,达到后更新j-i。再扫更大,所以此处打止。(j不用回去,否则会变成原来的i)
    2. 时,初始化为Integer.MAX_VALUE,忘了。

    [一句话思路]:

    长度不确定的窗口:boy追逐girl, girl在boy的循环中发生先量变、再质变

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    长度不确定的窗口:boy追逐girl, girl在boy的循环中发生先量变、再质变

    [复杂度]:Time complexity: O(2n) Space complexity: O(n)

    boy 一共走n, girl一共也走只n,而不是每次都跟着 。同时并行而不是嵌套,故为2n

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [关键模板化代码]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

    718. Maximum Length of Repeated Subarray dp这么麻烦的吗

     [代码风格] :

    public class Solution {
        /**
         * @param nums: an array of integers
         * @param s: An integer
         * @return: an integer representing the minimum size of subarray
         */
        public int minSubArrayLen(int s, int[] nums) {
            //corner case
            if (nums == null || s <= 0) {
                return -1;
            }
            //i,j in same dir
            int i = 0, j = 0;
            int sum = 0;
            int ans = Integer.MAX_VALUE;
            for (i = 0; i < nums.length; i++) {
                //accumulate
                while (j < nums.length && sum < s) {
                    sum += nums[j];
                    j++;
                }
                //change
                if (sum >= s) {
                        ans = Math.min(ans, j - i);
                    }
                //boy should go back
                sum -= nums[i];
            }
            //if no result
            if (ans == Integer.MAX_VALUE) {
                return -1;
            }
            
            return ans;
        }
    }
    View Code
  • 相关阅读:
    强大的代码生成工具MyGeneration
    代码自动生成工具MyGeneration之一(程序员必备工具)
    DotNET 开发常用工具汇集
    33条C#、.Net经典面试题目及答案
    TestDriven.NET – 快速入门
    HALCON 简介
    sparkSQL将谓词推入kudu引擎
    使用sparkSQL的insert操作Kudu
    spark操作Kudu之写
    spark操作Kudu之读
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8503790.html
Copyright © 2011-2022 走看看