GithubHelp home page GithubHelp logo

misterbooo / leetcodeanimation Goto Github PK

View Code? Open in Web Editor NEW
75.0K 2.6K 14.0K 497.86 MB

Demonstrate all the questions on LeetCode in the form of animation.(用动画的形式呈现解LeetCode题目的思路)

Java 99.50% Python 0.42% C++ 0.08%
leetcode leetcode-solutions leetcode-java animation leetcode-c

leetcodeanimation's Introduction

LeetCode Animation All in One

Travis Travis

There is an English version of README here. just click it!

我会尽力将 LeetCode 上所有的题目都用动画的形式演示出来,计划用 3 到 4 年时间去完成它,期待与你见证这一天!

文章最新首发于微信公众号 吴师兄学算法,您可以关注获取最新的文章。

为了帮助大家更好的入门学习算法,经过半年的积累,我给大家整理了《剑指 Offer》系列的四十道题目,都是算法面试的高频题目,每一道题目我都提供详细的分析、精美的配图、易于理解的动画视频,适合那些第一次刷题的同学,当然,也适合重复刷题的老手再次学习巩固基础。

文章同步博客地址:https://blog.algomooc.com/

汇总

序号 题目&题解 动画
0 十大经典排序算法动画与解析,看我就够了!(配代码完全版)
1 两数之和
2 两数相加
3 无重复字符的最长子串
4 寻找两个有序数组的中位数
9 回文数
10 正则表达式匹配
11 盛最多水的容器
15 三数之和
19 删除链表的倒数第 N 个节点
20 有效的括号
21 合并两个有序链表
23 合并 K 个排序链表
24 两两交换链表中的节点
25 K 个一组翻转链表
26 删除排序数组中的重复项
32 最长有效括号
38 报数
41 缺失的第一个正数
66 加一
75 颜色分类
86 分割链表
92 反转链表 II
94 二叉树的中序遍历
101 对称二叉树
102 二叉树的层序遍历
103 二叉树的锯齿形层次遍历
107 二叉树的层次遍历 II
118 杨辉三角
119 杨辉三角II
110 平衡二叉树
121 买卖股票的最佳时机
122 买卖股票的最佳时机II
123 买卖股票的最佳时机III
125 验证回文串
131 分割回文串
136 只出现一次的数字
138 复制带随机指针
139 单词拆分
141 环形链表
144 二叉树的前序遍历
145 二叉树的后序遍历
146 LRU缓存机制
150 逆波兰表达式求值
153 寻找旋转排序数组中的最小值
164 最大间距
167 两数之和 II - 输入有序数组
169 求众数
172 阶乘后的零
187 重复的 DNA 序列
191 位1的个数
199 二叉树的右视图
201 数字范围按位与
203 移除链表元素
206 反转链表
209 长度最小的子数组
219 存在重复元素 II
229 求众数II
231 2的幂
232 使用栈实现队列
237 删除链表中的节点
239 滑动窗口最大值
242 有效的字母异位词
268 缺失数字
279 完全平方数
283 移动零
295 数据流的中位数
301 删除无效的括号
319 灯泡开关
326 3 的幂
328 奇偶链表
342 4的幂
344 反转字符串
347 前K个高频元素
349 两个数组的交集
350 两个数组的交集 II
445 两数相加 II
447 回旋镖的数量
454 四数相加 II
642 设计一个搜索自动完成系统
690 员工的重要性
739 每日温度
877 石子游戏
1025 除数博弈
1099 小于 K 的两数之和

leetcodeanimation's People

Contributors

anomot avatar chilimyan avatar douysu avatar luzhzhsoft avatar mickeyouyou avatar misterbooo avatar nettee avatar peteryuhang avatar underspirit avatar wacry avatar xiangsshou avatar xiaoshuai96 avatar zjming avatar ztianming avatar zzilcc 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  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

leetcodeanimation's Issues

LeetCode169第三种算法缺陷

public int majorityElement(int[] nums) {
int candidate = nums[0], count = 1;
for (int i = 1; i < nums.length; ++i) {
if (count == 0) {
candidate = nums[i];
count = 1;
} else if (nums[i] == candidate) {
count++;
} else{
count--;
}
}
return candidate;
}
求一个数组的众数,存在一个缺陷,缺陷为最后的else
设定一个数组长度为M,如果存在此种关系 2N+3=M
最开始的N全部存放为X,第二个N存放不等于X的任意数。此时count==0
众数的最后结果其实取决与 最后三位数的。
如{2,2,2,2,2,1,3,5,6,7,8,11,11,0}
输出结果为11 ,但11只出现两次

为什么链表这一节的示例代码是死循环?

什么是链表?
为什么这里面这代码复制到IDE运行是死循环呢?

/**
* 链表中的结点,data代表节点的值,next是指向下一个节点的引用
 */
class Node {
    int data;// 结点的数组域,值
    Node next = null;// 节点的引用,指向下一个节点
    public Node(int data) {
        this.data = data;
    }
}

/**
* 链表
 */
public class LinkedList {
    int length = 0; // 链表长度,非必须,可不加
    Node head = null; // 头结点

    public void addNode(int val) {
        if (head == null) {
            head = new Node(val);
        } else {
            Node tmp = head;
            while (tmp.next != null) {
                tmp.next = tmp;
            }
            tmp.next = new Node(val);
        }
    }
}

How to make animations

I would like to know what software you are using to make these wonderful animations. I want to make some myself and would like to learn how to do it!

我可以提pr吗

哈哈,用ppt画不出来这么漂亮的图,真实辛苦lz了。我只会刷题,可以提交pr吗?:)

感谢博主分享的LeetCode图解

RT,感谢博主分享的LeetCode图解,一目了然,学到了很多知识,以前觉得一些深奥的算法现在也是非常容易理解,另外觉得PPT制作动画是不是有点不太方便,可以考虑使用AE或者Flash之类的制作下?或者可以专门开发一个小软件,如果需要帮忙的话 我会很乐意的,蛤蛤

十大经典排序算法里希尔排序的算法 改成 while(gap < arr.length /3) 是不是更好理解一点

 1//Java 代码实现
 2public class ShellSort implements IArraySort {
 3
 4    @Override
 5    public int[] sort(int[] sourceArray) throws Exception {
 6        // 对 arr 进行拷贝,不改变参数内容
 7        int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
 8
 9        int gap = 1;
10        while (gap < arr.length) {
11            gap = gap * 3 + 1;
12        }
13
14        while (gap > 0) {
15            for (int i = gap; i < arr.length; i++) {
16                int tmp = arr[i];
17                int j = i - gap;
18                while (j >= 0 && arr[j] > tmp) {
19                    arr[j + gap] = arr[j];
20                    j -= gap;
21                }
22                arr[j + gap] = tmp;
23            }
24            gap = (int) Math.floor(gap / 3);
25        }
26
27        return arr;
28    }
29}

这里 应该是 while (gap< arr.length /3) 吧

Leetcode 92题

92题的动画是不是放错了位置? 模拟动画和题目好像不符?

144. 先序遍历二叉树

用栈解决的思路没问题,但先入栈右节点,再处理左节点,思路有点拧

不符合先序遍历,根-左-右,的习惯

建议改成如下形式,参考代码:

class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        if not root: return []
        
        ans = []
        stack = []
        
        current_root = root
        # 当前节点不为none或者栈里有节点
        while current_root or stack:
            # 节点入栈,保留当前节点值,向左迭代
            if current_root is not None:
                stack.append(current_root)
                ans.append(current_root.val)
                current_root = current_root.left
            # 当前节点的左子树遍历完成,遍历当前节点的右子树
            else:
                current_root = stack.pop().right
        
        return ans

刷了题欢迎来面试,借楼招人,服务端朋友看过来

字节跳动教育线新项目,大投入,千亿级市场,服务端工程师大量缺口,各级别都要。项目主要使用Golang/Python,但是语言不做要求,可以来了再学。研发直招渠道,快速反馈,支持年前面试(可以远程面试),年后报道,北京、上海都有HC。完整简历请投邮箱 [email protected]。邮件标题:在线教育+姓名

Any plan to develop an app?

Hi, Thanks for the animations, it is really a brilliant idea.

I checked your other repos, it seems you working on iOS platform a lot.
I think maybe there is someone like me who want to read it on cell phone when commuting.
So is there any plan to develop an app?
If it is, maybe I can do something for help too :)

877号问题,数学问题补充。

最后数学分析部分,必须强调是偶数堆才能用这个思路。
[5,10000,3,4,5]
5(喜)->4(灰)->[5,10000,3]
我觉得这点应该作为分析的起点

只是最后一段,分析里没有提到,一开始理解有点困难,希望给后来的读者加上吧

感谢

理解起来更简单了,谢谢

来自GitHub小程序客户端:

image

026-删除排序数组中的重复项

解析思路
如果不同,则两个指针都向前走一步
漏了一句,应该改为
如果不同,则两个指针都向前走一步 ,并且把快指针的值赋给(慢指针+1 )的位置
不然容易误导

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.