登录
  • #刷题
  • #leetcode

如何高效的刷题?从happy number说起

sapphire0315
6899
12
经常听到一些朋友询问,leetcode刷了xx道,xx遍可否去面试了,能不能拿到xx offer?我个人觉得,凡是问有这种疑问的朋友,一般都不是刷题高手,并没有理解刷题之道!

回想起当年备考GRE, 就想到一种流行的说法,备好单词就行了,但是发现单词背的好并不完全等同于GRE高分,刷题其实和备考GRE是一样的,不在乎多少遍多少道,关键在于理解并且能把算法题给别人讲清楚(当然一定数目的算法题练习是必需的)。

来一道题目体验下: Happy Number

在真实面试的时候,如果遇到这道题目,很多刚开始刷题的求职者上来就说想实现code,把答案写出来! Hold on! Hold on!

推荐的解题逻辑:

1. 解读题目的含义与讲讲函数signature输入和输出是什么

2. 讲解算法(非实现),依据算法需求选择数据结构

3. 代码实现

4. 找测试数据,验证code正确性

5.分析算法复杂度与空间复杂复杂度

这里面涉及编程语言考点(java为例)



  • hashset /treeset的区别;

  • 为什么选择hashset?

  • java最大的integer是多大?

  • 如何估计2^31-1 的大小?

  • 补码和反码

关于这道题目背景与很多求职者交流情况

1.这道题目Uber曾经面试过,题目看起来很简单,但是全部都能答对不容易。这道题我问了大概50个人分析时间复杂度,没见过能分析特别明白的。

2. 依照这个题目,引申问了很多java的知识点,70%的人或多或少都有不会的。比如估计2^31-1 这个数的大小吧,很多转专业的人不知道在计算机里面有个很重要的估计方法2^10 = 1000,很能反映出求职者的基本素质。Apple曾经面试过一道题:2的最小多少次幂大于10万,对2^16= 65536 这种数字的记忆能反映出码农的基本素质。

3.大部分同学并没有建立起依据算法需求选择数据结构的逻辑链条:为什么要选择Hashset 而不选择treeset?为什么选择hashset 而不用hashmap?对基本数据结构掌握不牢固,将算法和数据结构混为一谈,是转专业同学的大问题。

4. 一道题目其实可以引申出很多计算机基本知识点,补码和反码什么的,overflow,这些都应该在刷题时候好好查一查,否则容易阴沟里翻船

下面是该题目的讲解视频

[media=x,500,375]http://v.youku.com/v_show/id_XMTUzMTgwMzQyOA==.html?from=y1.7-1.2[/media]
12条回复
热度排序

发表回复