算法数据结构面试分享(二)- 解决算法问题的一般方法

本文通过一道寻找整型数组中最大两个数的算法题为例,介绍了面试中有效沟通的重要性及解决问题的六个步骤。并引导读者思考如何高效解答此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    先看一道题目: 给你一个整型数组,我想找出来最大的两个数,能帮我写一个算法吗?

拿到这个题目,大家会怎么想到用什么方法解决吗?我见过很多同学的回答是,先排序,取最大的两个数就好了。那么接下来我们的问题就变成了如何给这个整型数组排序了。我们有很多种方法,冒泡排序,快速排序等等。很有可能面试官就让你开始写具体的排序算法了。当然,有些有经验的同学可能会说了,排序我直接调用sort方法就好了哈。
    其实,这两种情况都没有对错之分,只是没有敲开面试官的心扉,也没有给人眼前一亮,让自己脱颖而出。再看这道题,如果我是面试官,首先我想知道你对这道题的理解是什么?你打算怎么解决?你有什么问题要和我沟通确认的吗?如果这些功课都到位了,就算代码有些缺陷,面试官或许也不会计较,谁能无过哈。何况我们还是学生呢,经验少点,但是我有潜力呀。
    好了,如果要问,我能问什么呢?大家都知道沟通很重要,没有哪一个项目是可以一个人去完成的。我列一些问题给大家参考哈:
  1. 整型数组,数组的长度有限制吗?(没有提出来,基本上没有限制)
  2. 这个数组里数字的范围已知吗?(没有提出来,基本上没有特定范围)
  3. 找最大的数,那我能排序吗?能调用已有的SDK吗?(废话,当然不行,要不怎么叫写个算法呢)
  4. 能改变原来的数组顺序吗?(如果排序,基本上是改变了,除非你又copy了一个数组)
  5. 对算法的时间复杂度和空间复杂度有要求吗?(当然越小越好)
  6. 找最大的两个数,如果数组里只有一个或者没有数字怎么办?(你觉得呢?有一个返回一个,另一个返回什么呢? 0 还是 int.min 值,还是空值?哪一个更合理)
  7. 如果数组是空怎么办?(返回异常吗?返回最小值吗?返回空数组吗?数组里返回空值吗?)
  8. 返回两个数,用数组返回吗?还是用参数返回?(那我们返回数据吧)
  9. 返回两个数,最大的放第一个,第二大的放第二个吗?(假设是这样吧)
  10. 返回两个数,这个需求会经常变更吗?(返回3个?任意个?)

    我相信,可能你还能想到更多的问题。好了,我们能够想象,就这些问题我们估计会讨论个几分钟,当然,也会有面试官把问题踢回给你,让你自己给答案,不合理的时候他可能还会问为什么。那我们就只能按照自己的理解把最佳方案写出来了。这篇blog是为了拿这道题为例,总结解决算法和数据结构的一般方法,接下来的章节里我们会带大家一起解析这道题。
    直接上干货了哈。解决算法和数据结构问题一般会遵循以下6个步骤,而真正代码其实其中的一两步。
  1.     确保你理解了问题,并且尝试一个例子,确认理解无误
  2.     想想你可以用什么方法解决问题,你会选择哪一种,为什么?
  3.     解释你的算法和实现的方法
  4.     写代码的时候,记住,一定要解释你现在在干什么
  5.     拿一个实例,Work Through你的代码
  6.     修复缺陷,保证异常情况都被考虑到
当然,这中间如果你发现了新的问题,我们需要及时提出来。当我们写不下去的时候,我们要再回到之前的例子中去,是不是我们的理解不对,当然面试官在这时候也会忍不住和你沟通的,除非你自己放弃了这个机会。

接下来的章节里,我们就按照这6部曲解析常见的算法和数据结构的问题了。

好了,欢迎大家关注我的公众号,还有我的系列 视频教程 , 数据结构与算法 微软经典算法面试题辅导。大家有什么更好的解法,也欢迎讨论哈。
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值