From 0334bbce5561adeb32d263d2fe44d9a556d56d9e Mon Sep 17 00:00:00 2001 From: Azureki Date: Sun, 30 Sep 2018 21:10:36 +0800 Subject: [PATCH] =?UTF-8?q?O(nlogn)=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lc209. Minimum Size Subarray Sum.py | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 lc209. Minimum Size Subarray Sum.py diff --git a/lc209. Minimum Size Subarray Sum.py b/lc209. Minimum Size Subarray Sum.py new file mode 100644 index 0000000..3ae38f2 --- /dev/null +++ b/lc209. Minimum Size Subarray Sum.py @@ -0,0 +1,44 @@ +class Solution: + def minSubArrayLen(self, s, nums): + """ + :type s: int + :type nums: List[int] + :rtype: int + """ + def bin_search(left, right, key, sums): + while left <= right: + mid = (left + right) // 2 + if sums[mid] >= key: + right = mid - 1 + else: + left = mid + 1 + return left + + length = len(nums) + sums = [None] * (length + 1) + sums[0] = 0 + + for i in range(0, length): + sums[i + 1] = sums[i] + nums[i] + + # 两层循环 O(N^2)解法 + # for i in range(1, length + 1): + # for j in range(length + 1 - i): + # if sums[j + i] - sums[j] >= s: + # return i + + res = length + 1 + for i in range(length + 1): + # sums[right]-sums[left],不包括nums[left] + tem = bin_search(i + 1, length, sums[i] + s, sums) + if tem == length + 1: + break + if tem - i < res: + res = tem - i + + return 0 if res == length + 1 else res + +s=100 +nums=[] +soln = Solution() +print(soln.minSubArrayLen(s, nums))