• 209. Minimum Size Subarray Sum


    一、题目

      1、审题

      

      2、分析

        求正整数数组 nums 中连续的元素和大于等于 s 的最少元素的个数。

    二、解答

      1、思路:

        方法一、

          ①、采用变量 min 记录最少元素数,初始值为 Integer.MAX_VALUE;

          ②、遍历 nums 中元素,若当前元素下标为 i 时;令变量 sum = nums[i];

          ③、再创建一个内循环,从下标 i - 1 往前遍历数组 nums,且 sum 值加上遍历经过的元素,

            当 sum >= s 时,跳出内循环,且判断 min 是否需要更新。当 i == 0 时,sum 依然小于 s,则跳出内循环。

          ④、第一层循环遍历完后,若 min 依然是 Integer.MAX_VALUE 则返回 0, 否则返回 min。

     1     public int minSubArrayLen(int s, int[] nums) {
     2     
     3         int minLen = Integer.MAX_VALUE;
     4         int sum = 0;
     5         for (int i = 0; i < nums.length; i++) {
     6             sum = nums[i];
     7             if(sum >= s)
     8                 return 1;
     9             for (int j = i - 1; j >= 0; j--) {
    10                 if((sum += nums[j]) >= s) {
    11                     minLen = Math.min(minLen, i - j + 1);
    12                     break;
    13                 }
    14             }
    15         }
    16         
    17         return minLen == Integer.MAX_VALUE ? 0 : minLen;
    18     }

      方法一、 采用两个指针。

          j 不断向后移动,i 也向后移动,sum 记录数组 nums 从下标 i 到下标 j 之间的元素和,最终返回 sum >= s 时的最小 j - i;

        public int minSubArrayLen2(int s, int[] nums) {
            
            if(nums == null || nums.length == 0)
                return 0;
            
            int i = 0, j = 0, sum = 0, min = Integer.MAX_VALUE;
            
            while(j < nums.length) {
                sum += nums[j++];
                
                while(sum >= s) {
                    min = Math.min(min, j - i);
                    sum -= nums[i++];
                }
            }
            
            return min == Integer.MAX_VALUE ? 0 : min;
        }
  • 相关阅读:
    JSON 数字排序 多字段排序
    hdu-4747-Mex
    Android SDK更新缓慢或无法更新的解决方法
    UVA 11806
    SDL显示内存中的图像
    Cocos2d-x 2.1.5 简单动画
    codeforce343A
    android 控件的移动
    Erlang千万级用户游戏框架(Openpoker)源码文件分析清单
    八大排序c++可运行精简版,一目了然
  • 原文地址:https://www.cnblogs.com/skillking/p/9881816.html
Copyright © 2020-2023  润新知