亚马逊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: The array
@param k: the sum
@return: The length of the array
"""
def lent(self, arr):
return len(arr)
def searchSubarray(self, arr, k):
# Write your code here

这是一篇关于亚马逊2021算法面试的实战分享,主要问题为查找数组中和为k的连续子数组。文章介绍了问题描述、边界条件、解题思路及源代码,强调使用Python中的字典来优化解决方案,达到O(n)的时间复杂度。
最低0.47元/天 解锁文章
1173

被折叠的 条评论
为什么被折叠?



