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

    长度最小的子数组

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

    示例: 

    输入: s = 7, nums = [2,3,1,2,4,3]

    输出: 2

    解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。

    进阶:

    如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。

    两个指针, start end, end向后走,直到 sum 大于 s. 然后start向后, 直到sum 小于s. 同时更新 min值.

     1 public class Solution {
     2     //1,1,4
     3     public int minSubArrayLen(int s, int[] nums) {
     4         //init check
     5         int start = 0;
     6         int end = 0;
     7 
     8         int sum = 0;
     9         int min = Integer.MAX_VALUE;
    10 
    11         while(start<nums.length && end<nums.length) {
    12             while(sum<s && end<nums.length) {
    13                 sum += nums[end++];
    14             }
    15             while(sum>=s && start<=end) {
    16                 min = Math.min(min, end-start);
    17                 sum -= nums[start++];
    18             }
    19         }
    20         return min==Integer.MAX_VALUE ? 0 : min;
    21     }
    22 }
  • 相关阅读:
    抓包来看ftp状态码
    socket基础篇
    密码复杂度检查函数
    time模块
    读取日志文件,搜索关键字,打印关键字前5行。yield、deque实例
    装饰器--函数
    yield用法
    字符编码
    pycharm + git实现两台电脑代码同步
    PyCharm常见用法
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10203028.html
Copyright © 2011-2022 走看看