Git Product home page Git Product logo

algorithm-essentials's Introduction

算法珠玑

举一反三,以少胜多,告别题海战术。

在线阅读

本书的目标读者是在硅谷找工作的码农,也适用于在国内找工作的码农,以及刚接触 ACM 算法竞赛的新手。

市场上讲解算法的书已经汗牛充栋,为什么还要写这本书呢?主要原因是我对目前市场上的大部分算法书都不太满意。 本书有如下特色:

  1. 按类别讲解。每个类别精选有限的几道题目,做完后即可对这个类别熟练掌握,来了新题也不怕。

  2. 每道题都有完整的代码。

    市场上的大部分书,都会讲思路,但给出的代码都是片段,不是完整可编译的代码。本书每题都有完整的代码,且每个代码经过千锤百炼,保证可读性的前提下尽可能简短,方面读者在面试中能快速写出来。

  3. 每道题都有多种解法。

    本书的宗旨是,用尽可能少的题目,覆盖尽可能多的算法。本书中的的每道题都有多种解法,每种解法不是简单的小改进,而是完全不同的思路,力求举一反三,让读者触类旁通。

  4. 支持多种编程语言。

    目前支持 Java, C++, C#, Python, Ruby, JavaScript, Swift, Scala, Clojure, 将来还会支持更多编程语言。

推荐的阅读顺序

  1. 先阅读广搜深搜。因为搜索是算法之王,通用性最强,学会了后能应付很多类型的题目,所以广搜和深搜的性价比最高。
  2. 二叉树。二叉树类的题目,大部分是深搜题,用递归实现,很考验人的抽象思维能力,属于面试官喜欢出的题型。
  3. 动态规划。动规跟深搜有3个共同特征,代码短,很考验抽象思维能力,有通用套路,也是面试官喜欢出的题型。不过很多动规题目需要一些经验,需要一些记忆型知识,当场推公式比较困难。

不建议刷的题型:

  • 模拟(simulation)类题目。这类题目没有任何算法可言,纯粹是体力活。
  • 贪心(greedy)算法。每道题都不一样,解法没有通用性。
  • hard题目。面试中出现hard的概率极小,个别高频hard题目可以做一做。
  • 数学类题目。有的题目需要数学知识,这类题目知道就知道,不知道的话当场也不可能想得出来。面试官一般不会出这种题目,完全无法考察写代码水平。

Community

Github: https://github.com/soulmachine/algorithm-essentials

微博: @灵魂机器

License

Book License: CC BY-SA 3.0 License

algorithm-essentials's People

Contributors

soulmachine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

algorithm-essentials's Issues

Remove Duplicates from Sorted Array II 注解未更新

Remove Duplicates from Sorted Array II 代码 2 注解:

下面是一个更简洁的版本。上面的代码略长,不过扩展性好一些,例如将occur < 2改为occur < 3,就变成了允许重复最多 3 次。

代码 1 所用变量名为N = 2,而非occur < 2

算法精粹 - Remove Duplicates from Sorted Array II 示例代码似乎有误

首先,谢谢提供如此好的一个教程帮助初学者或像我这种忘记的差不多的人重新学习。
示例代码似乎有误,我在leecode中尝试了,不能通过,因为nums中的元素被替换,所以好比[1,1,1,2,2,3]这样的list会出错。
我找到一个稍微简单的办法处理这种问题,直接删除list中重复的元素,示例代码如下(n=2,使用其他n>2的情况):
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) <= 2:
return len(nums)
idx = 2
while idx < len(nums):
if nums[idx-2]== nums[idx]:
del nums[idx]
else:
idx+=1
return len(nums)

Remove Duplicates from Sorted Array II 注解未更新

Remove Duplicates from Sorted Array II 代码 2 注解:

下面是一个更简洁的版本。上面的代码略长,不过扩展性好一些,例如将occur < 2改为occur < 3,就变成了允许重复最多 3 次。

代码 1 所用变量名为N = 2,而非occur < 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.