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

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

    拿到这个题目,大家会怎么想到用什么方法解决吗?我见过很多同学的回答是,先排序,取最大的两个数就好了。那么接下来我们的问题就变成了如何给这个整型数组排序了。我们有很多种方法,冒泡排序,快速排序等等。很有可能面试官就让你开始写具体的排序算法了。当然,有些有经验的同学可能会说了,排序我直接调用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部曲解析常见的算法和数据结构的问题了。

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

原文地址:http://blog.51cto.com/8140370/2112884

时间: 2024-10-07 01:22:54

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

计数排序 - 算法数据结构面试分享(五)

数组排序问题 - 计数排序 昨天我们留了一道题目"给你一个整型数组,里面出现的数在[0-100] 之间,能用最优化的方法帮我排序吗". 1. 确保我们理解了问题,并且尝试一个例子,确认理解无误. 这是一道排序算法题,我们学过很多排序的算法.不一样的是,它给定一个额外的条件,数组里的每个数字都在1-100之间.如果我们采取传统的排序算法,这个条件我们好像用不上.大家在面试的时候如果发现有条件没有用上,基本上我们给出的算法可能不是最优的,或者我们没有解决它最原始的需求.举个例子{50, 4

算法数据结构面试分享(六)数组排序问题(2) - 计数排序

数组排序问题(2) 昨天我们留了一道题目"给你一个整型数组,里面出现的数在[0-100] 之间,能用最优化的方法帮我排序吗". 1. 确保我们理解了问题,并且尝试一个例子,确认理解无误. 这是一道排序算法题,我们学过很多排序的算法.不一样的是,它给定一个额外的条件,数组里的每个数字都在1-100之间.如果我们采取传统的排序算法,这个条件我们好像用不上.大家在面试的时候如果发现有条件没有用上,基本上我们给出的算法可能不是最优的,或者我们没有解决它最原始的需求.举个例子{50, 46, 5

程序员代码面试指南 IT名企算法与数据结构题目最优解 ,左程云著pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容简介  · · · · · ·这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失.“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联系,使知识的学习避免碎片化

C/C++ 数据结构之算法(面试)

数据结构中的排序算法. 排序算法的相关知识: (1)排序的概念:所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来. (2)稳定的排序方法:在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的.相反,如果发生改变,这种排序方法不稳定. (3)排序算法的分类(分为5类):插入排序.选择排序.交换排序.归并排序和分配排序. (4)排序算法两个基本操作:<1>比较关键字的大小. <2>改变指向记录的

算法面试课程笔记001 算法面试到底是什么鬼

算法面试课程笔记001算法面试到底是什么鬼 =============================================================================== 本文地址 : =============================================================================== 算法面试是什么? 让大家在面对面试中的算法问题时,有一个合理的思考路径: ·不代表能够"正确"回答每一个算法问题

算法和面试

因为去年坑爹的创业失败了,所以在年底就预备开始找工作.对于公司我最看重Google,13年底面过一次,挂得十分惨烈,这次正好有时间,就打算好好准备一下.面试的核心在于算法,对于Google尤为如此.刷题是不用说的了,我的leetcode注册了两三个账号,刷了七八遍,脑子都刷糊了,当然受益也不少,还有geekforgeeks作为补充,只要把这两个吃透,基本上所有的面试都可以轻松拿下. 在经过了三个多月的精心准备,年后我信心满满的从家里回到北京的住处,与Google的HR约好面试时间,然后就是电话面

算法数据结构中有哪些奇技淫巧?

之前我也写过一两篇与算法技巧相关的文章 一些常用的算法技巧总结 [算法技巧]位运算装逼指南 今天的这篇文章,算是一种补充,同时会列举一些常见的算法题,如何用这些技巧来解决,通过使用这些方法,可以让一些算法题变的更加简单. 1.用 n & (n - 1)消去 n 最后的一位 1 在 n 的二进制表示中,如果我们对 n 执行 n = n & (n - 1) 那么可以把 n 左右边的 1 消除掉,例如 n = 1001 n - 1 = 1000 n = n & (n - 1) = (10

十种常见的排序算法,面试算法必考

1.冒泡排序 已知一组无序数据a[1].a[2].……a[n],需将其按升序排列.首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变.再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变.再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值.这样处理一轮后,a[n]的值一定是这组数据中最大的.再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的.再对a[1]~a[n-2]以相同方

大话数据结构之一(绪论、算法)

数据结构绪论 数据结构是相互之间存在一种或多种特定关系的数据元素的集合 程序设计=数据结构+算法 数据结构事实上就是一门研究非数值计算的程序设计问题的操作对象,以及它们之间的关系和操作等相关问题的学科. 数据是描述客观事件的符号,是计算机中可以操作的对象,是能被计算机识别,并输入能计算机处理的符号集合,也就是说数据必须具备两个前提: 可以输入到计算机中 能被计算机程序处理 数据 数据元素是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录 数据项:一个数据元素可以由若干个