第一次没仔细审题,要是连续的子串,我直接想着把字符串逆序排序,然后找从前往后加....debug的时候才意识到....
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
nums.sort(reverse = True)
sum = 0
num = 0
for i in range(0,len(nums)):
num += 1
sum += nums[i]
if sum >= target:
break;
if sum >= target:
return num
else:
return 0
不知道为什么还过了16组用例=.=
进入正题.....
思路:暴力破解,循环遍历整个数组;
每遍历一个元素,就求后面元素的前缀和,直到出现前缀和大于目标的元素;
用一个临时变量存储最小长度,若遍历长度小于临时变量,则重新赋值
写的错误代码,警示下自己
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
max = 10**5
for i in range(0,len(nums)):
temp = nums[i:]
if temp[0] >= target:#####这是第一个没注意到点,没考虑到第一个元素就满足条件的情况
return 1
#这句是最大的错误点,没想清楚;如果让j=i+1,j的值假如很大了,就会造成j的值比len(temp)还大
#既然temp已经是截取后的数组,那j从第一个遍历就好
for j in range(i+1,len(temp)):
temp[j] += temp[j-1]
if temp[j] >= target:
if