拟人算法系列文章,以容易理解的方式描述算法,点赞收藏不迷路
长度最小子数组
class Solution:
def min_sub_array_len(self, a: list[int], target: int) -> int:
i, sum_ = 0, 0
min_len = float('inf')
for j in range(len(a)):
sum_ += a[j]
while sum_ >= target:
min_len = min(min_len, j - i + 1)
sum_ -= a[i]
i += 1
return 0 if min_len == float('inf') else int(min_len)
if __name__ == '__main__':
s = Solution()
a = [2, 3, 1, 2, 4, 3]
target = 7
print(s.min_sub_array_len(a, target)) # 2
好比两个人,一个走的快一个走的慢,然后走的快的人每看到一个值就累加,如果累加值大于等于目标值,那么就计算目前两人之间的距离,并求最新的最小距离,然后为了让累加结果小于目标值,于是累加结果减去走得慢的人所在的值,并让走的慢的人往前走一步