摘要:
# ArrayList源码分析 ## ArrayList 简介 `ArrayList` 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用`ensureCapacity`操作来增加 `ArrayList` 实例的容量。这可以减少递增式 阅读全文
摘要:
剑指 Offer 04. 二维数组中的查找 传送门 题目 在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 限制: 0 <= n <= 1000 0 阅读全文
摘要:
剑指 Offer 03. 数组中重复的数字 传送门 题目 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 限制: 2 <= n 阅读全文
摘要:
高精度运算 1、高精度加法 例题:A+B Problem(高精) 传送门 题目描述: 高精度加法,相当于 a+b problem,不用考虑负数。 输入格式: 分两行输入。 。 输出格式: 输出只有一行,代表 a+b 的值。 思路: 用String类型存储两个数 将两个数倒序 阅读全文
摘要:
多线程 1.相关概念 1.1程序、进程与线程 程序:为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程:程序的一次执行过程,或是正在内存中运行的应用程序。如:运行中的QQ,运行中的网易音乐播放器。 每个进程都有一个独立的内存空间,系统运行一个程序即是一个进程从创建、 阅读全文
摘要:
并查集 并查集主要用于解决一些元素分组的问题。它管理一系列不相交的集合,主要由一个整型数组pre[ ]和两个函数find( )、**join( )**构成: pre[ ]:记录了每个点的前驱节点是谁 find(x):用于查找指定节点 x 属于哪个集合 join(x,y):用于合并两个节点 x 和 y 阅读全文
摘要:
回溯算法解决排列—组合—子集问题 无论是排列、组合还是子集问题,就是让你从序列 nums 中以给定规则取若干元素,主要有以下几种变体: 元素无重不可复选,即 nums 中的元素都是唯一的,每个元素最多只能被使用一次,这也是最基本的形式。 元素可重不可复选,即 nums 中的元素可以存在重复,每个元素 阅读全文
摘要:
滑动窗口 时间复杂度 算法的时间复杂度是 O(N),其中 N 是输入字符串/数组的长度。 为什么呢?简单说,字符串/数组中的每个元素都只会进入窗口一次,然后被移出窗口一次,不会说有某些元素多次进入和离开窗口,所以算法的时间复杂度就和字符串/数组的长度成正比。 大致逻辑 int left = 0, r 阅读全文
摘要:
提效神器之Lombok 准备 在IDEA插件中安装Lombok 在IDEA设置中启动annotation processing 添加依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> 阅读全文
摘要:
快速排序 简介 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 简单来说就是: 1、取一个基准数,进行一次快速排序(执行一次 阅读全文