All Projects → githubofrico → Swordtooffer

githubofrico / Swordtooffer

经典常考必备面试算法,包括但不仅限于《剑指Offer》,《程序员面试金典》中的题目,持续更新中...

Programming Languages

java
68154 projects - #9 most used programming language

Labels

Projects that are alternatives of or similar to Swordtooffer

Gods
GoDS (Go Data Structures). Containers (Sets, Lists, Stacks, Maps, Trees), Sets (HashSet, TreeSet, LinkedHashSet), Lists (ArrayList, SinglyLinkedList, DoublyLinkedList), Stacks (LinkedListStack, ArrayStack), Maps (HashMap, TreeMap, HashBidiMap, TreeBidiMap, LinkedHashMap), Trees (RedBlackTree, AVLTree, BTree, BinaryHeap), Comparators, Iterators, …
Stars: ✭ 10,883 (+13335.8%)
Mutual labels:  tree, list
Pidtree
🚸 Cross platform children list of a PID.
Stars: ✭ 76 (-6.17%)
Mutual labels:  tree, list
Smart Array To Tree
Convert large amounts of data array to tree fastly
Stars: ✭ 91 (+12.35%)
Mutual labels:  tree, list
Containers
This library provides various containers. Each container has utility functions to manipulate the data it holds. This is an abstraction as to not have to manually manage and reallocate memory.
Stars: ✭ 125 (+54.32%)
Mutual labels:  tree, list
Computer Science In Javascript
Computer science reimplemented in JavaScript
Stars: ✭ 2,590 (+3097.53%)
Mutual labels:  tree, list
Datastructure
常用数据结构及其算法的Java实现,包括但不仅限于链表、栈,队列,树,堆,图等经典数据结构及其他经典基础算法(如排序等)...
Stars: ✭ 419 (+417.28%)
Mutual labels:  tree, list
Mlib
Library of generic and type safe containers in pure C language (C99 or C11) for a wide collection of container (comparable to the C++ STL).
Stars: ✭ 321 (+296.3%)
Mutual labels:  tree, list
Learningmasteringalgorithms C
Mastering Algorithms with C 《算法精解:C语言描述》源码及Xcode工程、Linux工程
Stars: ✭ 615 (+659.26%)
Mutual labels:  tree, list
Exploretrees Sg
🌳 Explore Trees in Singapore 🇸🇬
Stars: ✭ 68 (-16.05%)
Mutual labels:  tree
Elements
⚒ Modular components for RecyclerView development enforcing clean, reusable and testable code, with built-in support for paging and complex hierarchies of data.
Stars: ✭ 75 (-7.41%)
Mutual labels:  list
Immutable Treeutils
Functional tree traversal helpers for ImmutableJS data structures
Stars: ✭ 67 (-17.28%)
Mutual labels:  tree
Awesome Drupal
Useful resources for Drupal CMS 💧
Stars: ✭ 69 (-14.81%)
Mutual labels:  list
Awesome Raspberry Pi
📝 A curated list of awesome Raspberry Pi tools, projects, images and resources
Stars: ✭ 9,343 (+11434.57%)
Mutual labels:  list
Awesome Research
🌱 a curated list of tools to help you with your research/life; I built a front end around this repo, please use the link below
Stars: ✭ 1,152 (+1322.22%)
Mutual labels:  list
Awesome Typescript Ecosystem
😎 A list of awesome TypeScript transformers, plugins, handbooks, etc
Stars: ✭ 79 (-2.47%)
Mutual labels:  list
Awesome Android
A curated list of awesome Android packages and resources.
Stars: ✭ 8,843 (+10817.28%)
Mutual labels:  list
Splay Tree
Fast splay-tree data structure
Stars: ✭ 80 (-1.23%)
Mutual labels:  tree
Efficientadapter
一个可以提高开发效率的adapter
Stars: ✭ 78 (-3.7%)
Mutual labels:  list
Memento
Fairly basic redis-like hashmap implementation on top of a epoll TCP server.
Stars: ✭ 74 (-8.64%)
Mutual labels:  list
The Engineering Managers Booklist
Books for people who are or aspire to manage/lead team(s) of software engineers
Stars: ✭ 1,180 (+1356.79%)
Mutual labels:  list

SwordtoOffer

经典常考必备面试算法,包括但不仅限于《剑指Offer》,《程序员面试金典》中的题目,持续更新中...

现具体包括如下问题的解法:

  • 阶乘的递归和非递归解法;

  • 二分查找的递归和非递归解法;

  • 斐波那契数列的四种解法:经典递归法、优化递归法、循环迭代法,数组法;

  • 杨辉三角的创建、存取、打印算法;

  • 字符串回文判断的三种解法:递归法,循环迭代法, StringBuilder法;

  • 诺比塔问题的递归解法;

  • 【Offer 3】二维数组中的查找的两种解法:时间复杂度分别为O(nlgn)和O(n);

  • 【Offer 4】字符串空格置换算法;

  • 【Offer 6】已知二叉树中序和前序遍历序列,重新构建二叉树;

  • 【Offer 5】链表的倒序打印;

  • 【Offer 7】用两个栈实现队列(一个用作插入,一个用作删除);

  • 结点为int型的二叉树及其常用算法实现;

  • 【Offer 9】递归算法的数学模型(数学归纳法)、经典递归问题(斐波那契数列、变态跳台阶)、斐波那契数列的应用(跳台阶、矩阵覆盖等);

  • 【Offer 8】二分搜索算法及其应用(旋转数组的最小元素):序列有序或部分有序;

  • 【Offer 13】给定链表头结点和待删除节点,以O(1)的时间复杂度删除链表中的待删除节点:换一种思路考虑,删除当前节点就是把待删除节点的值替换成其后继节点的值,并删除其后继节点;

  • 【Offer 10】位运算相关算法,核心思想:a & (a -1) 意味着将a的最右边的1变成0,其可应用于求解:一个数的二进制中1的个数问题、数m的二进制需要改变多少次才能变成数n的二进制、判断一个树是否是2的幂;判断一个数的奇偶性;

  • 【Offer 15】寻找链表中的倒数第K个节点算法(双指针法);

  • 【Offer 11】幂运算算法(减少相乘次数,递归算法);

  • 【Offer 12】从1开始打印最大的n位数算法(用字符串表示大数,进位原理的掌握);

  • 【Offer 16】链表反转算法(可以见解“以O(1)的时间复杂度删除链表中的待删除节点”的算法思想,图示法(原头节点的指针指向一个初始为null的节点)、递归算法);

  • 【Offer 14】数组中奇偶数划分算法,不保证原数列奇、偶数的相对位置的解法:快排划分算法的应用,双指针法(头指针/尾指针);保证原数列奇、偶数的相对位置的解法:双指针法(分别指向最新奇数与最老偶数)。

  • 【Offer 17】合并两个排序列表:递归解法干净利落,循环解法考虑细节较多;

  • 【Offer 18】树的子结构:递归算法的设计与实现;

  • 【Offer 19】二叉树镜像:递归算法设计与实现,画图、找规律;

  • 【Offer 20】顺时针打印矩阵(可以不是方阵):递归算法的设计与实现,递归终止条件的考虑(只剩一行,只剩一列,只剩一个元素);

  • 【Offer 21】包含min函数的栈:利用一个额外的栈来保存存储栈中的最小值;

  • 【Offer 22】栈的压入/弹出序列匹配:用一个栈来模拟给定压入和弹出序列,若最后栈变为空,则符合要求;

  • 【Offer 23】从上往下打印二叉树:二叉树的广序遍历,借助于队列;

  • 【Offer 24】二叉搜索树的后序遍历序列:二叉搜索树的概念(左子树 < 根结点 < 右子树)以及递归算法的设计;

  • 【Offer 25】二叉树中和为某一值的路径:递归算法的设计和前序遍历的应用(两种解法);

  • 【Offer 26】复杂链表的复制:复杂问题的分解(三种解法[三种解法时间、空间复杂度不同]);

  • 【Offer 27】二叉搜索树转换为双向链表:二叉搜索树的概念(左子树 < 根结点 < 右子树)以及递归算法的设计,两种解法;

  • 【Offer 28】字符串全排列:递归算法的设计和前序遍历的应用(两种解法),注意字符串中含有重复字符的情况,即是否需要去重;

  • 【全排列的扩展】字符串包含字符的所有组合:分治与递归(共包括三步:1.剔除重复字符,使字符串个字符互异;2.分别获取含1...n个字符的组合(可以分为含第一个字符和不含第一个字符两种情况来考虑,分治法);3.将上一步所得到的所有组合合并);

  • 【全排列的应用领域】若题目按照一定要求摆放若干个数字(不超过9个),那么我们可以先求出这些数字的所有排列,然后再一一判断每个排列是否满足题目要求;

  • 【全排列的应用一】正方体的相对面顶点和相等:全排列的应用,列举出所有可能性,再用具体条件(满足三个等式)逐一验证,剔除不满足条件的结果;

  • 【全排列的应用二】八皇后问题:全排列的应用,列举出所有可能性,再用具体条件(两皇后不在同一行、列和对角线上)逐一验证,剔除不满足条件的结果;

  • 【Offer 29, 30】快排Parititon算法的应用(求序列的中位数,第K大元素,最小K个元素,超过序列一半的元素,时间复杂度O(n));此外,在海量数据下,最小K个数的获取可以借用最大堆来实现,时间复杂度O(n·lgK),空间复杂度为O(K),不需要将所有数据一次性读入内存。

  • 【Offer 31】连续子数组最大和:用一个值存储子数组和的最大值。若当前子数组和为整数,则继续累加;否则,从当前位置重新计算。

  • 【Offer 32】从1到n整数中出现的次数(两种解法):逐个计算每个数字中1的个数并最后累加;分治与递归;

  • 【Offer 33】把数组排成最小数:先全排列再找最小数;指定新的排序规则,将所有数排序并依次连接起来(重点在于排序规则的定义,两种方法)。

  • 【Offer 34】丑数:依次判断每个数是否为丑数(解法一);根据当前丑数序列计算下一个丑数(解法二)。

  • 【Offer 35】第一个只出现一次的字符:char[256]字符数组(哈希表)。

  • 【Offer 36】数组中的逆序对:归并排序算法的应用。

  • 【Offer 37】两个链表的第一个公共节点:单链表的性质与特征,双指针法。

  • 【Offer 38】数字在排序数组中出现的次数:二分查找算法的变换与应用。

  • 【Offer 39】二叉树的深度:递归算法的设计与应用。

  • 【Offer 40】数组中只出现一次的数字(使用哈希表求解/使用异或运算求解)。

  • 【Offer 41】和为s的两个数字、和为s的连续正数序列(双指针法求解)。

  • 【Offer 42】翻转单词顺序、左旋转字符串等算法(双指针法求解)。

  • 【Offer 43】n个骰子的点数,递归分治法(分为两堆,一堆1个,另一堆n-1个),循环迭代法(利用n-1的情况求n的情况)。

  • 【Offer 44】扑克牌的顺子,问题的建模与转化(1.排序 2.统计大小王的个数 3.统计所需大小王的个数 4.比较)。

  • 【Offer 45】圆圈中最后剩下的数字,模拟游戏法(用单链表模拟环形链表),递归法(找规律,发现递归公式)。

  • 【Offer 46】求 1 + 2 + ... + n,可用构造函数法,递归法。

  • 【Offer 47】不用加减乘除做加法,位运算,分为三步(1.求和(不处理进位),2.处理进位 3.以上两步结果相加(递归))。

  • 【Offer 48】不使用新的变量,交换两个整型变量的值,异或运算法(利用异或运算,异或运算满足交换律,且一个数与自身异或为0,一个数与0异或为自身),基于加减法。

  • 【Offer 49】把字符串转换成整数,边界值的考虑。

  • 【Offer 50】任意树中两个结点的最低公共祖先,特殊情形(二叉搜索树,拥有指向父节点的指针的树,普通树),根据二者到根结点的路径求解。

  • 【Offer 51】数组中重复的数字,简易哈希表法。

  • 【Offer 52】构建乘积数组,分治法(找规律)。

  • 【Offer 53】正则表达式匹配,递归算法的经典应用(穷举所有情形)。

  • 【Offer 54】表示数字的字符串,(整数/小数)(E/e)(整数)。

  • 【Offer 55】字符流中第一个不重复的字符,简易哈希表法。

  • 【Offer 56】链表中环的入口点,快慢指针法的应用(确定链表是否有环(一个速度是一个的2倍),并求出环的节点数N;在此基础上,求环的入口点(一个比一个快N步))。

  • 【Offer 57】删除链表中的重复节点。

  • 【Offer 58】二叉树的下一个节点,按照给定节点相对于根结点和父节点的位置进行查找下一个节点。

  • 【Offer 59】对称二叉树,递归算法的应用。

  • 【Offer 60】把二叉树打印成多行,借助队列,按行打印。

  • 【Offer 61】按之字形顺序打印二叉树,解法基本与上一个题目类似。

  • 【Offer 62】序列化二叉树,前序遍历的应用(所有的叶节点都用特殊符号(例如,"#")表示)。

  • 【Offer 63】二叉搜索树的第K个节点,二叉搜索树的特性与递归算法的设计。

  • 【Offer 64】数据流中的中位数,快排划分算法的应用,类似题目:第K大数,最小的K个数。

  • 【Offer 65】滑动窗口的最大值。

  • 【Offer 66】矩阵中的路径,递归算法 + 穷举思想,类似题目:Offer53(正则表达式匹配)、Offer66(矩阵中的路径)。

  • 【Offer 67】机器人的运动范围,递归算法 + 穷举思想,类似题目:Offer53(正则表达式匹配)、Offer66(矩阵中的路径)。

Ps:源码中每个包对应一个问题。若项目中的源代码存在谬误,请不吝指出,在此拜谢!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].