120 多个不断更新的、交互式的、测试驱动的编码挑战,带有 Anki 抽认卡。
挑战集中在编码面试中发现的算法和数据结构。
每个挑战都有一个或多个参考解决方案,这些解决方案是:
挑战很快就会提供按需增量提示,帮助您找到最佳解决方案。
笔记本还详细说明:
还包括各种数据结构和算法的单元测试参考实现。
提供的 Anki 抽认卡使用间隔重复来帮助您记住关键概念。
非常适合在旅途中使用。
正在寻找资源来帮助您准备系统设计和面向对象设计面试?
查看姐妹存储库《系统设计入门》,其中包含其他 Anki 甲板:
每个挑战都有两个笔记本,一个带有单元测试供您解决的挑战笔记本,一个供您参考的解决方案笔记本。
格式:挑战类别 - 挑战数量
挑战总数:120
以下数据结构的单元测试、功能齐全的实现:
以下算法经过单元测试、功能齐全的实现:
图片来源
挑战 | 静态笔记本 |
---|---|
判断字符串是否包含唯一字符 | 挑战 │ 解决方案 |
确定一个字符串是否是另一个字符串的排列 | 挑战 │ 解决方案 |
判断一个字符串是否是另一个字符串的旋转 | 挑战 │ 解决方案 |
压缩字符串 | 挑战 │ 解决方案 |
反转字符串中的字符 | 挑战 │ 解决方案 |
给定两个字符串,找到单个不同的字符 | 挑战 │ 解决方案 |
查找总和为特定值的两个索引 | 挑战 │ 解决方案 |
实现哈希表 | 挑战 │ 解决方案 |
实施嘶嘶声 | 挑战 │ 解决方案 |
查找字符串中第一个不重复的字符 | 贡献 │ 贡献 |
删除字符串中指定的字符 | 贡献 │ 贡献 |
反转字符串中的单词 | 贡献 │ 贡献 |
将字符串转换为整数 | 贡献 │ 贡献 |
将整数转换为字符串 | 贡献 │ 贡献 |
添加挑战 | 贡献 │ 贡献 |
挑战 | 静态笔记本 |
---|---|
从链表中删除重复项 | 挑战 │ 解决方案 |
查找链表中倒数第 k 个元素 | 挑战 │ 解决方案 |
删除链表中间的节点 | 挑战 │ 解决方案 |
围绕给定值对链表进行分区 | 挑战 │ 解决方案 |
将两个数字相加,其数字存储在链表中 | 挑战 │ 解决方案 |
找到链表循环的起点 | 挑战 │ 解决方案 |
判断链表是否为回文 | 挑战 │ 解决方案 |
实现一个链表 | 挑战 │ 解决方案 |
确定列表是循环列表还是非循环列表 | 贡献 │ 贡献 |
添加挑战 | 贡献 │ 贡献 |
挑战 | 静态笔记本 |
---|---|
使用单个数组实现 n 个堆栈 | 挑战 │ 解决方案 |
实现一个跟踪其最小元素的堆栈 | 挑战 │ 解决方案 |
实现一组堆栈类,包装容量有限的堆栈列表 | 挑战 │ 解决方案 |
使用两个栈实现队列 | 挑战 │ 解决方案 |
使用另一个堆栈作为缓冲区对堆栈进行排序 | 挑战 │ 解决方案 |
实现一个栈 | 挑战 │ 解决方案 |
实现一个队列 | 挑战 │ 解决方案 |
实现由数组支持的优先级队列 | 挑战 │ 解决方案 |
添加挑战 | 贡献 │ 贡献 |
挑战 | 静态笔记本 |
---|---|
在树上实现深度优先搜索(前序、中序、后序) | 挑战 │ 解决方案 |
在树上实现广度优先搜索 | 挑战 │ 解决方案 |
确定树的高度 | 挑战 │ 解决方案 |
从排序数组创建具有最小高度的二叉搜索树 | 挑战 │ 解决方案 |
为二叉树的每一层创建一个链表 | 挑战 │ 解决方案 |
检查二叉树是否平衡 | 挑战 │ 解决方案 |
确定一棵树是否是有效的二叉搜索树 | 挑战 │ 解决方案 |
在二叉搜索树中查找给定节点的有序后继节点 | 挑战 │ 解决方案 |
查找二叉搜索树中的第二大节点 | 挑战 │ 解决方案 |
寻找最低共同祖先 | 挑战 │ 解决方案 |
反转二叉树 | 挑战 │ 解决方案 |
实现二叉搜索树 | 挑战 │ 解决方案 |
实现最小堆 | 挑战 │ 解决方案 |
实现一个字典树 | 挑战 │ 解决方案 |
在图上实现深度优先搜索 | 挑战 │ 解决方案 |
在图上实现广度优先搜索 | 挑战 │ 解决方案 |
判断图中两个节点之间是否存在路径 | 挑战 │ 解决方案 |
实现一个图表 | 挑战 │ 解决方案 |
在给定项目和依赖项列表的情况下查找构建顺序。 | 挑战 │ 解决方案 |
找到加权图中的最短路径。 | 挑战 │ 解决方案 |
找到未加权图中的最短路径。 | 挑战 │ 解决方案 |
添加挑战 | 贡献 │ 贡献 |
挑战 | 静态笔记本 |
---|---|
实施选择排序 | 挑战 │ 解决方案 |
实现插入排序 | 挑战 │ 解决方案 |
实现快速排序 | 挑战 │ 解决方案 |
实现归并排序 | 挑战 │ 解决方案 |
实现基数排序 | 挑战 │ 解决方案 |
对字符串数组进行排序,使所有字谜词彼此相邻 | 挑战 │ 解决方案 |
在已排序、旋转的数组中查找项目 | 挑战 │ 解决方案 |
在排序矩阵中搜索项目 | 挑战 │ 解决方案 |
查找不在 n 个整数的输入中的 int | 挑战 │ 解决方案 |
给定排序数组A,B,将B按排序顺序合并到A中 | 挑战 │ 解决方案 |
实现稳定的选择排序 | 贡献 │ 贡献 |
使不稳定的排序变得稳定 | 贡献 │ 贡献 |
实现高效的就地版本的快速排序 | 贡献 │ 贡献 |
给定两个已排序的数组,按排序顺序将一个数组合并到另一个数组中 | 贡献 │ 贡献 |
在旋转和排序的整数数组中查找元素 | 贡献 │ 贡献 |
添加挑战 | 贡献 │ 贡献 |
挑战 | 静态笔记本 |
---|---|
递归、动态、迭代地实现斐波那契 | 挑战 │ 解决方案 |
最大化放置在背包中的物品 | 挑战 │ 解决方案 |
最大化放置在背包中的无限物品 | 挑战 │ 解决方案 |
找到最长公共子序列 | 挑战 │ 解决方案 |
找到最长的递增子序列 | 挑战 │ 解决方案 |
最小化矩阵乘法的成本 | 挑战 │ 解决方案 |
给定 k 笔交易,最大化股票价格 | 挑战 │ 解决方案 |
给定一组硬币,找出表示 n 美分的最少方法 | 挑战 │ 解决方案 |
给定一组硬币,找出表示 n 美分的唯一方法数 | 挑战 │ 解决方案 |
打印 n 对括号的所有有效组合 | 挑战 │ 解决方案 |
穿越迷宫 | 挑战 │ 解决方案 |
打印集合的所有子集 | 挑战 │ 解决方案 |
打印字符串的所有排列 | 挑战 │ 解决方案 |
查找数组中的魔术索引 | 挑战 │ 解决方案 |
求跑n步的方法数 | 挑战 │ 解决方案 |
用 3 座塔和 N 个圆盘实现河内塔 | 挑战 │ 解决方案 |
递归、动态、迭代地实现阶乘 | 贡献 │ 贡献 |
对已排序的整数数组执行二分搜索 | 贡献 │ 贡献 |
打印字符串的所有组合 | 贡献 │ 贡献 |
实现油漆填充功能 | 贡献 │ 贡献 |
给定 1、5、10、25 分硬币,找到表示 n 分的所有排列 | 贡献 │ 贡献 |
添加挑战 | 贡献 │ 贡献 |
挑战 | 静态笔记本 |
---|---|
生成素数列表 | 挑战 │ 解决方案 |
找到数字根 | 挑战 │ 解决方案 |
创建一个支持 insert、max、min、mean、mode 的类,时间复杂度为 O(1) | 挑战 │ 解决方案 |
判断一个数是否是2的幂 | 挑战 │ 解决方案 |
两个数字相加,不带 + 或 - 号 | 挑战 │ 解决方案 |
减去两个不带 + 或 - 号的数字 | 挑战 │ 解决方案 |
检查一个数是否是质数 | 贡献 │ 贡献 |
确定笛卡尔平面上的两条直线是否相交 | 贡献 │ 贡献 |
仅使用加法,实现整数的乘法、减法和除法 | 贡献 │ 贡献 |
找到第 k 个数,使得唯一的质因数为 3、5 和 7 | 贡献 │ 贡献 |
添加挑战 | 贡献 │ 贡献 |
挑战 | 静态笔记本 |
---|---|
实现常见的位操作操作 | 挑战 │ 解决方案 |
确定将 a 转换为 b 时要翻转的位数 | 挑战 │ 解决方案 |
在屏幕上画一条线 | 挑战 │ 解决方案 |
翻转一点以最大化最长的 1 序列 | 挑战 │ 解决方案 |
获取下一个最大和下一个最小的数字 | 挑战 │ 解决方案 |
合并两个二进制数 | 挑战 │ 解决方案 |
交换整数中的奇数位和偶数位 | 挑战 │ 解决方案 |
打印 0 到 1 之间数字的二进制表示 | 挑战 │ 解决方案 |
确定给定整数的二进制表示形式中 1 的数量 | 贡献 │ 贡献 |
添加挑战 | 贡献 │ 贡献 |
挑战 | 静态笔记本 |
---|---|
查找最多包含 k 个不同字符的最长子字符串 | 挑战 │ 解决方案 |
求三个数的最大乘积 | 挑战 │ 解决方案 |
通过 1 次买入和 1 次卖出最大化股票利润 | 挑战 │ 解决方案 |
将列表中的所有零移至末尾 | 挑战 │ 解决方案 |
查找所有其他 int 的产品 | 挑战 │ 解决方案 |
给定出入口列表,找到最繁忙的时段 | 挑战 │ 解决方案 |
确定岛屿的周长 | 挑战 │ 解决方案 |
格式化许可证密钥 | 挑战 │ 解决方案 |
找到最长的绝对文件路径 | 挑战 │ 解决方案 |
合并元组范围 | 挑战 │ 解决方案 |
分配cookie | 挑战 │ 解决方案 |
确定您是否可以在 Nim 中获胜 | 挑战 │ 解决方案 |
检查杂志是否可用于创建勒索信 | 挑战 │ 解决方案 |
求一个句子可以在屏幕上显示的次数 | 挑战 │ 解决方案 |
乌托邦树 | 挑战 │ 解决方案 |
最大化异或 | 挑战 │ 解决方案 |
添加挑战 | 贡献 │ 贡献 |
interactive-coding-challenges # Repo
├─ arrays_strings # Category of challenges
│ ├─ rotation # Challenge folder
│ │ ├─ rotation_challenge.ipynb # Challenge notebook
│ │ ├─ rotation_solution.ipynb # Solution notebook
│ │ ├─ test_rotation.py # Unit test*
│ ├─ compress
│ │ ├─ compress_challenge.ipynb
│ │ ├─ compress_solution.ipynb
│ │ ├─ test_compress.py
│ ├─ ...
├─ linked_lists
│ ├─ palindrome
│ │ └─ ...
│ ├─ ...
├─ ...
*笔记本 (.ipynb) 读取/写入关联的单元测试 (.py) 文件。
此自述文件包含 Binder 的链接,它在线托管存储库内容的动态笔记本,无需安装。
跑步:
pip install jupyter
有关更优化地设置开发环境的详细说明、脚本和工具,请查看 dev-setup 存储库。
有关笔记本电脑安装的更多详细信息,请按照此处的说明进行操作。
有关 IPython/Jupyter Notebooks 的更多信息可以在此处找到。
挑战以IPython/Jupyter Notebooks的形式提供,并已使用 Python 2.7 和 Python 3.x 进行了测试。
如果您需要安装 IPython/Jupyter Notebook,请参阅 Notebook 安装部分。
运行挑战笔记本:
$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook
这将启动您的网络浏览器,其中包含挑战类别列表:
要使用 pdb调试您的解决方案,请参阅以下票证。
注意:如果您的解决方案与解决方案笔记本中列出的解决方案不同,请考虑提交拉取请求,以便其他人可以从您的工作中受益。查看贡献指南以了解详细信息。
挑战、解决方案和单元测试以IPython/Jupyter Notebooks的形式呈现。
欢迎贡献!
查看贡献指南,了解有关如何执行以下操作的详细信息:
请随时与我联系讨论任何问题、疑问或意见。
我的联系信息可以在我的 GitHub 页面上找到。
我根据开源许可证向您提供此存储库中的代码和资源。因为这是我的个人存储库,所以您收到的我的代码和资源的许可证来自我,而不是我的雇主 (Facebook)。
Copyright 2015 Donne Martin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.