一些零零碎碎的面经中的算法题【持续更新】

阿里机器学习面经:

在这里插入图片描述

对于题一:

思路①:建立一个1-100的哈希表,遍历数组,同时从哈希表中弹出相应值。最终哈希表中剩下的就是数组中缺失的。时间复杂度o(n),空间复杂度o(n)
思路②:排序,然后看哪两个不相邻(或者看哪个元素与其下标不对应)。时间复杂度o(nlogn),空间复杂度o(1)
思路③:类似于《找数组中重复的数字》一题修改数组的做法。遍历数组,对于下标为i的元素,判断其值与下标是否相等,若不等则替换到与其值相等的下标中去。注意:由于缺失一个元素,因此若遍历到100,则在放置时会溢出,那我们就并不真正放置。此时由于没有元素交换回来,因此该下标一定为空,我们就用一个值来记录当前为空的下标。若是后面有值填充过来,我们就更新空下标。直到遍历完成,最终的空下标值就是缺失的元素。若全程没有空下标,则证明缺失的值是100。时间复杂度o(n),空间复杂度o(1)
思路④:类似于《找数组中重复的数字》一题不修改数组的做法,用二分的思想逐渐定位缺失区间在哪。首先将区间分为(1,50]和(50,100],遍历数组看落在一区间的有多少个数,如果数刚好是区间长度,证明该段数据不缺失,那么另一段区间必缺失。按此思路二分下去,最终将缺失区间缩减,直至定位出缺失的值。时间复杂度o(nlogn),空间复杂度o(1)
思路⑤:直接遍历数组求和,然后用1+2+…+100值减去数组之和。emmmm。

对于题二:

关键:从缺失的值开始元素与下标一定不等了。
思路①:遍历看谁的值与下标不等。时间复杂度o(n),空间复杂度o(1)
思路②二分查找。若mid满足相等,则缺失值必然位于后一区间,否则前一区间。时间复杂度o(logn),空间复杂度o(1)

思考:

通用算法一定不是最优解,因为对于各种环境都适用,所以用了以后一定会包含除了题目要求的额外的信息,这必然会需要更高的复杂度。所以要针对特定问题做优化,找到一个专门适用该题目的解法。
比如该题如果用哈希表,那么你会发现数组即使不是1-100也适用,元素就算丢失多个也适用。所以一定不是这个题目的最优解法。要充分利用题目的已知信息:1-100且丢失一个----->想到思路⑤

————————————————————————————————————————————
一些扩展:
找出出现奇数次的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值