当了5年亚马逊面试官,我总结出了算法面试套路

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

亚马逊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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值