1. # 给定一个含有 n 个正整数的数组和一个正整数 target 。
    2. #
    3. # 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长
    4. # 度。如果不存在符合条件的子数组,返回 0 。
    5. #
    6. #
    7. #
    8. # 示例 1:
    9. #
    10. #
    11. # 输入:target = 7, nums = [2,3,1,2,4,3]
    12. # 输出:2
    13. # 解释:子数组 [4,3] 是该条件下的长度最小的子数组。
    14. #
    15. #
    16. # 示例 2:
    17. #
    18. #
    19. # 输入:target = 4, nums = [1,4,4]
    20. # 输出:1
    21. #
    22. #
    23. # 示例 3:
    24. #
    25. #
    26. # 输入:target = 11, nums = [1,1,1,1,1,1,1,1]
    27. # 输出:0
    28. #
    29. #
    30. #
    31. #
    32. # 提示:
    33. #
    34. #
    35. # 1 <= target <= 109
    36. # 1 <= nums.length <= 105
    37. # 1 <= nums[i] <= 105
    38. #
    39. #
    40. #
    41. #
    42. # 进阶:
    43. #
    44. #
    45. # 如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。
    46. #
    47. # Related Topics 数组 双指针 二分查找
    48. # 👍 546 👎 0
    49. # leetcode submit region begin(Prohibit modification and deletion)
    50. class Solution(object):
    51. def minSubArrayLen(self, target, nums):
    52. """
    53. :type target: int
    54. :type nums: List[int]
    55. :rtype: int
    56. """
    57. import sys
    58. min_len = sys.maxsize
    59. p1, p2 = 0, 0
    60. tmp_sum = 0
    61. while p2 < len(nums):
    62. tmp_sum += nums[p2]
    63. while tmp_sum >= target:
    64. min_len = min(min_len, p2 - p1 + 1)
    65. tmp_sum -= nums[p1]
    66. p1 += 1
    67. p2 += 1
    68. return min_len if min_len < sys.maxsize else 0
    69. # leetcode submit region end(Prohibit modification and deletion)