树
二叉树基础 什么是二叉树? 二叉树(Binary Tree)是包含 n 个节点的有限集合,该集合或者为空集(此时,二叉树称为空树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。 二叉树种类 完全二叉树 叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。完全二叉树特点: 只允许最后一层有空缺节点且空缺节...
二叉树基础 什么是二叉树? 二叉树(Binary Tree)是包含 n 个节点的有限集合,该集合或者为空集(此时,二叉树称为空树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。 二叉树种类 完全二叉树 叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。完全二叉树特点: 只允许最后一层有空缺节点且空缺节...
堆基础 堆定义 堆是一颗完全二叉树 堆中某个节点的值总是不大于(小根堆)或不小于其父节点(大根堆)的值 用数组来实现 大根堆、小根堆 大根堆 每个节点的值都大于等于子节点的值;最大值在根节点 小根堆 每个节点的值都小于等于子节点的值;最小值在根节点 堆排序 构建堆,取堆顶为最小 (最大) 将剩下的元素重新构建一个堆,取堆顶,一直到元素取完...
链表必须要掌握的题 反转单链表(递归 + 迭代) 反转链表指定区间 链表中每 K 个一组反转(hard) 寻找单链表的中点 合并两个排序的链表 合并 k 个已排序的链表 hard 判断链表是否有环(2014 百度考过) 判断链表环的入口 删除链表倒数第 N 个节点(2022 年,华润万家 全名 K 歌考过) 获取链表的倒数第 k 个节点:注意 he...
字符串基础 必须掌握的字符串题 最长回文子串 medium 最小覆盖子串 hard 无重复字符的最长子串 medium 43.字符串相乘 medium 415.字符串相加 easy 字符串面试题 43. 字符串相乘 medium 题目: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示...
06 栈队列 用两个栈实现队列 (简单) 题目题解思路 栈是先进后出,用 2 个辅助栈来实现队形的先进先出,一个栈 stack1 临时存到 push 的 node,一个栈 stack2 存先进先出的数据 在 pop 的时候,判断 stack1 是否有值,stack1 有值的话,遍历 stack1,将 stack1 出栈的数据再 push 到 stack2 中去,因为 stac...
数组快慢指针/双指针相关题 26. 删除有序数组中的重复项(保留一个) easy 快慢指针 题目 解法 1:暴力 TreeSet public static int removeDuplicates1(int[] nums) { TreeSet<Integer> set = new TreeSet<>(); for (int i =...
冒泡排序 冒泡排序思路 有 n 个数,需要 i=n-1 趟排序,每趟需要比较 i 次 每趟前面的数和后面的数做比较,前面的数如果比后面的大,那么两两进行交换,大的数冒泡到后面去 每趟将最大的值冒泡到最后一个位置去 举例子 以 3412 为例,需要 n-1=3 趟冒泡 第 1 趟 (0n-1 03):3124,将 4 冒泡到这趟的最后 第 ...
二分查找/搜索基础 什么是二分查找? 二分查找是在有序表中查找目标元素的算法。不断的压缩范围数据的范围,最后当只剩下 1 个数据时答案已经被锁定了。 二分查找框架 int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = le...
数据结构基础 「数据结构」 指的是 数据的组织结构,用来组织、存储数据。数据结构可以分为 「逻辑结构」 和 「物理结构」。 逻辑结构可分为:集合结构、线性结构、树形结构、图形结构。 物理结构可分为:顺序存储结构、链式存储结构 作为线性表的两种存储方式 —— 链表和数组 数组 数组,所有元素都连续的存储于一段内存中,且每个元素占用的内存大小相同。这使得数组具备了通过下标快...
责任链模式 责任链模式定义 是一个请求有多个对象来处理,这些对象是一条链,但具体由哪个对象来处理,根据条件判断来确定,如果不能处理会传递给该链中的下一个对象,直到有对象处理它为止。 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。以上定义来自《设计模式之美》 官方图解: ...