zoukankan      html  css  js  c++  java
  • LeetCode209. 长度最小的子数组

    题目

    给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

    代码

    法一、直接暴力

     1 class Solution {
     2 public:
     3     int minSubArrayLen(int s, vector<int>& nums) {
     4         int min = INT_MAX;
     5         for(int i = 0;i < nums.size();i++){
     6             int res = 0;
     7             for(int j = i;j < nums.size();j++){
     8                 res += nums[j];
     9                 if(res >= s ) {
    10                    if(min > j-i+1) min = j-i+1;
    11                    break;
    12                 }
    13             }
    14         }
    15         if(min == INT_MAX) return 0;
    16         else return min;   
    17     }
    18 };

    要注意最后的返回值,开始提交的错误的原因:就在没有考虑不存在子序列之和的情况

    法二、滑动窗口,,,,重点掌握这种方法

    滑动窗口就是双指针算法的一种。

    定义变量:窗口的起始位置 start,结束位置 end,窗口的长度 subLength,窗口内数据之和  sum,以及最终结果res

    主体思想:

    1. 找到满足条件的序列,即窗口。寻找的方法就是终止位置不断右移,直到窗口内元素之和满足条件

    2.收缩这个窗口,start后移 ,查看是否有满足条件的子序列。

      若满足条件(意味着窗口可以收缩),则start继续右移,继续检验,直到收缩到最小窗口

      若不满足条件(意味着需要将窗口整体右移),此时相比于之前的窗口,起始位置后移,终止位置后移,返回1,

      去找满足条件的窗口

     1 class Solution {
     2 public:
     3     int minSubArrayLen(int s, vector<int>& nums) {
     4         int res = INT_MAX;  //存放结果
     5         int sum = 0;//存放滑动窗口数值之和
     6         int start = 0;//代表窗口的起始位置
     7         int subLength = 0; //滑动窗口的长度
     8 
     9         for(int end = 0;end < nums.size();end++){  
    10             //end代表窗口的结束位置
    11             sum += nums[end];
    12             while(sum >= s){
    13                 subLength = (end - start + 1);
    14                 res = min(res,subLength);
    15                 sum = sum -nums[start];
    16                 start++;
    17                 
    18             }
    19 
    20         }
    21        
    22         if(res == INT_MAX) return 0;
    23         else return res;   
    24     }
    25 };

    法三、前缀和数组

    待更新

  • 相关阅读:
    android ImageSwitcher
    andriod Spinner
    andriod RadioButton
    anriod TabHost
    给大学生的几条良心建议
    6月最新地铁站周边二手房价格出炉
    机器学习 101 Mahout 简介 建立一个推荐引擎 使用 Mahout 实现集群 使用 Mahout 实现内容分类 结束语 下载资源
    Vim设置colorscheme小技巧
    2017年阳光私募基金一季度报告
    实用的 atom 插件
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14309247.html
Copyright © 2011-2022 走看看