# Algorithm
leetcode/lintcode上的算法题

**关于问题的答案和解体的思路,可以移步 :  https://github.com/zhaozhengcoder/Algorithm**

### About 

    这个仓库最初的想法是把lintcode/lintocde上面的算法题目整理一下,因为很多题目太多了显得太乱了,就不继续在GitHub上面写了,以前写的一部分移到我的博客上面了。
    GitHub上面打算整理一些比较典型 或者是 自己思考过的觉得很好的问题。


    在博客上面开了两个专栏

        1. 数据结构/算法导论 : 
        https://www.jianshu.com/nb/12397278

        2. OJ练习题 : 
        https://www.jianshu.com/nb/9973135

        推荐两篇自己对 递归搜索和动态规划 的理解的blog :

        1. https://www.jianshu.com/p/5eb4da919efe

        2. https://www.jianshu.com/p/6b3a2304f63f



### 题目的索引
    GITHUB上面打算整理一些比较典型 或者是 自己思考过的觉得很好的问题。

    1.从数据结构的角度索引 :
        
        a. 数组

            两数之和

            连续最大子数组

            乘积最大子数组

            买卖股票的最佳时机1,2,3

                买卖股票的最佳时机1:寻找数组里面的最大上升子序列
                买卖股票的最佳时机2:寻找数组里面所有的上升子序列
                买卖股票的最佳时机3:寻找数组里面两个不重合的上升子序列,并且使他们的和最大 to-do

            区间合并(将有交集的区间合并)

            寻找缺失的数

                1. 一个顺序的数组[1,2,3,5,6],缺少了一个数字,如何找到它?

                2. 一个arr的数组,只有一个数字出现了一次,其他都出现了两次,如何找到它?

            数组的近似划分(将一个数组分成两个,但是差最小)

            数组里面第k大的数

            跳跃游戏1,2

                跳跃游戏1:
                    给出一个非负整数数组,你最初定位在数组的第一个位置,
                    数组中的每个元素代表你在那个位置可以跳跃的最大长度,
                    返回 是否能到达数组的最后一个位置

                跳跃游戏2:
                    给出一个非负整数数组,你最初定位在数组的第一个位置,
                    数组中的每个元素代表你在那个位置可以跳跃的最大长度,   
                    返回 使用最少的跳跃次数到达数组的最后一个位置

        a+. 二维矩阵

            顺时针打印二维矩阵

            给出一个二维矩阵,找到一个路径(从某个左上角到某个角右下)使这条路径的值最大        

        b. 链表

        c. 字符串

            最长公共子序列(并不是连续的)

            最长回文子串

        d. 二叉树

            返回一个平衡二叉树的第k大的节点

            二叉树的最低公共祖先

            非递归遍历二叉树

        e. 图

            最短路径

            深度/广度优先遍历

    2. 从算法的角度建立索引 :

        a. 递归搜索问题

            N后问题

            全排列

            组合问题1,2

        b. 动态规划 

            背包问题1,2

            数组的近似划分(将一个数组分成两个,但是差最小)

            跳跃游戏1,2

            给出一个二维矩阵,找到一个路径(从某个左上角到某个角右下)使这条路径的值最大 


    3. 常用

        a. 排列/组合

        b. 深度优先遍历

        c. 最短路径

    4. 智力题(算法本身很简单,就是想不到的那种)

        最多有多少个点在同一条直线上


### Others

    1. 类似于系统设计的题目
        
        带最小值的栈/队列

        url长链接转短链接

    2. 解决特定问题

        并查集

        布隆过滤器



如果你对机器学习的算法感兴趣,欢迎共同讨论:

https://github.com/zhaozhengcoder/Machine-Learning