常见的面试题解决方案,排序查找的思维转变(针对之前的查找、排序知识)

针对之前的查找排序算法的学习,让我们来看看几道相关的面试题。

可以清楚看到题目的要求,不能返回同一元素对应的下标,且一定是有答案的。

两种思路:
第一种,直接暴力求解,利用循环来比较,最后返回结果。

代码实现及演示:

思路就是,利用循环遍历直接暴力求解,第i的数和第i+1个数匹配相加判断是否满足条件?时间复杂度O(n^2) 效率比较低下。

接下来,转换思维,已知两个数相加等于目标数,那我们可不可以通过一个数与目标数之间的关系来表示另一个数,显然可以。假设第一个数是a 另一个数就是 target-a。首先排序,然后利用二分查找进行下标寻找即可。可以看到这里没有说列表已经有序,所以我们可以通过二维数组排序。

代码及结果演示:

 

 思路点拨:
我们最后返回的是对应的下标,且列表没有排序,我们就可以下标和值分解;排好序后利用二分查找。a这个数利用循环拿到,对应算出b 通过二分查找,拿到结果。如果找到b了,直接返回下标,利用内置函数sorted排序即可。

还有一种根据字典来:

 

可以看到字典的这种方法是很恐怖的!!!

 

 给定两种方法:

第一种是通过排序判断;

第二种是通过字典统计。

 

可以看出上面这道题是比较简单的,要么排序判断字符串是否相等,要么利用字典统计各个字符出出现的次数,时间复杂度皆为O(n)

 我们可以看到这是有序的二维数组,那就可以考虑使用二分查找(针对顺序列表)

代码如下:

总结:
一般我们做算法题都可以往排序和查找上想,顺序列表,可以想到而二分查找。一般都是修改mid,转换一下差不多就可以实现了。字典有时候是不错的选择,查找数据或者比较数据都可以。

今天的分享就到这里,谢谢各位的阅读!

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值