亚马逊2021算法真题:查找子数组
描述
给定一个数组arr和一个非负整数k,你需要从这个数组中找到一个连续子数组,使得这个子数组的和为k。返回这个子数组的长度。如果有多个这样的子串,返回结束位置最小的,如果还有多个,返回起始位置最小的。如果找不到这样的子数组,返回-1。
数组的长度不超过106,数组中每个数小于等于106,k不超过106。
样例1
输入:arr=[1,2,3,4,5] ,k=5
输出:2
解释:
该数组中,最早出现的连续子串和为5的是[2,3]。
样例 2
输入:arr=[3,5,7,10,2] ,k=12
输出:2
解释:
该数组中,最早出现的连续子串和为12的是[5,7]。
考点
python中的字典
解题思路
先求出前缀和,然后对每一个前缀和,查找与k的差值是否被标记,标记了直接return,否则在map上做标记。时间复杂度O(n)。
源代码
class Solution:
"""
@param arr: Th