zoukankan      html  css  js  c++  java
  • 406. 和大于S的最小子数组

    406. 和大于S的最小子数组

    中文English

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

    样例

    样例 1:

    输入: [2,3,1,2,4,3], s = 7
    输出: 2
    解释: 子数组 [4,3] 是该条件下的最小长度子数组。
    

    样例 2:

    输入: [1, 2, 3, 4, 5], s = 100
    输出: -1
    

    挑战

    如果你已经完成了O(nlogn)时间复杂度的编程,请再试试 O(n)时间复杂度。

    输入测试数据 (每行一个参数)如何理解测试数据?

     同向型双指针

    class Solution:
        """
        @param nums: an array of integers
        @param s: An integer
        @return: an integer representing the minimum size of subarray
        """
        """
        大致思路:
        1.双指针,同时移动,如果sum大于s,则i 向右边移动,如果sum小于s,则j += 1,一直到sum大于s(一直循环到长度l为止,不符合条件,则不作比较)
        2.最后判断min_nums,返回min_nums
        """
        def minimumSize(self, nums, s):
            if sum(nums) < s: return -1
    
            #初始化
            l = len(nums)
            min_nums,sums = l + 1, 0
            #第二个指针,一直走到sum >= s,则跳出循环
            j = 0
    
            #同向型双指针
            for i in range(l):
                #如果是小于s的话,则一直在里面循环
                while j < l and sums < s:
                    sums += nums[j]
                    j += 1
                    
                if sums >= s:
                    min_nums = min(min_nums, j - i)
                
                #上面已经满足条件,第一个指针开始缩小区间,开始向右边移动
                sums -= nums[i]
            
            return min_nums
  • 相关阅读:
    Django ORM操作
    两张表是一对一的关系为什么不直接都放在一张表里面?
    TCP、UDP 详解
    如何使用Xshell连接虚拟机
    selenium中常见的无法定位元素问题
    python中生产者消费者模式
    Selenium 点击后跳转至新窗口无法定位元素问题(element not interactable)
    linux 网络管理
    Linux文件权限
    linux 用户管理命令
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13192505.html
Copyright © 2011-2022 走看看