01 2021 档案
摘要:准备 public interface Sort { void sort(int[] nums); } 定义所有排序方式通用接口 冒泡排序 两两比较,将最大(最小值)移动到最右边。 第一版 public class BubbleSort implements Sort { @Override pub
阅读全文
摘要:题目描述 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。 进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗? 示例 1: 输入:nums1 = [1,3], nums2 = [2] 输出:2.0000
阅读全文
摘要:普通二分查找(查找等于指定值的索引下标) 非递归实现 public class Client { public static void main(String[] args) { int[] nums = {1, 3, 5, 7, 9, 10}; System.out.println(binaryS
阅读全文
摘要:题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "
阅读全文
摘要:题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1: 输入:l1 = [2,4,3], l2 =
阅读全文
摘要:题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15]
阅读全文
摘要:前言 snowflake可以生成全局唯一且有序的Id,相对来说UUID也可以实现,但是无序且长度太长,为36位。 第一位固定为0,表示正数 41位表示时间戳,一共可以使用69年 5位表示数据中心节点,5位表示机器标识,一共可以支持1024个节点 12位表示一毫秒内的序列号,共4096个 代码实现 /
阅读全文
摘要:介绍 AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。示例图如下 整体代码实现 代码基于之前的二叉搜索树实现,java实现二叉搜索树 import java.util.Array
阅读全文
摘要:介绍 并查集是一种特殊的树结构,示例图如下 可以很方便的进行以下两种操作:以上图为例 判断元素6和元素4是否属于同一组, 合并元素6和元素4所在的组 代码实现 public interface UF { /** * 容量 */ int size(); /** * 是否已连接 */ boolean c
阅读全文
摘要:介绍 Trie树(又名字典树,前缀树)是一种多叉树,是一种专门处理字符串的数据结构,Trie树 示例图如下 保存的数据为单词列表[goods,good,gmail,grade,dog,cap,cook,map],应用场景有搜索提示 代码实现 import java.util.ArrayList; i
阅读全文
摘要:介绍 线段树(又名区间树)也是一种二叉树,每个节点的值等于左右孩子节点值的和,线段树 示例图如下 以求和为例,根节点表示区间0-5的和,左孩子表示区间0-2的和,右孩子表示区间3-5的和,依次类推。 代码实现 /** * 使用数组实现线段树 */ public class SegmentTree<E
阅读全文
摘要:介绍 堆是一种完全二叉树,最大堆就是每个节点元素的值都要大于其子节点元素的值,相反最小堆就是每个节点元素的值都要小于其子节点元素的值。最小堆示例图如下 因为完全二叉树的特性,我们可以使用数组来实现堆。 代码实现 import java.util.ArrayList; import java.util
阅读全文