- 博客(11)
- 收藏
- 关注
原创 【总结】背包问题的至多/恰好/至少
对于一维背包问题,注意区分该问题的下面这三种情况,即至多/恰好/至少,它们的状态转移方程其实是一样的,差异在于初始化。(1) 体积至多是v时的最小/大值全部初始化为0,且保证v大于等于0。代表题目:AcWing 423.采药,其代码如下:import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in);
2021-04-26 23:24:48
490
原创 整数二分查找
下面分享常用的二分查找模板。面对具体算法题时,分析出check()函数该如何写后,根据左边界l应该写为l = mid + 1还是l = mid来选择使用哪一个模板,一般来说就无需额外考虑边界的问题了。模板1boolean check(int x){/* ... */} // 检查x是否满足某种性质int binary_search(int l, int r){ while(l < r){ int mid = l + r >> 1; // 注意可能溢出,最好写成((
2021-04-08 11:51:56
162
原创 双指针/滑动窗口
本文主要内容转载于分享珍藏的滑动窗口模板,学会套路秒杀十题双指针算法,或滑动窗口算法,在《挑战程序设计竞赛》这本书中被叫做「虫取法」,我觉得非常生动形象。因为滑动窗口的两个指针移动的过程和虫子爬动的过程非常像:前脚不动,把后脚移动过来;后脚不动,把前脚向前移动。下面分享一个代码模板,能解决大多数滑动窗口问题:public int findSubArray(nums){ int n = nums.length; // 数组的长度,如果是字符串,改成nums.length() int left =
2021-02-05 11:21:50
321
原创 【LeetCode】1319.连通网络的操作次数(Number of Operations to Make Network Connected)
目录题目描述题目大意解题方法方法一:并查集题目描述There are n computers numbered from 0 to n-1 connected by ethernet cables connections forming a network where connections[i] = [a, b] represents a connection between computers a and b. Any computer can reach any other computer di
2021-02-02 21:54:33
202
原创 【LeetCode】547.省份数量(Number of Provinces)
目录题目描述题目大意解题方法方法一:并查集题目描述There are n cities. Some of them are connected, while some are not. If city a is connected directly with city b, and city b is connected directly with city c, then city a is connected indirectly with city c.A province is a group
2021-02-02 20:10:36
929
原创 哈希表
哈希表哈希表的关键是哈希函数,以及如何处理冲突。常见的处理冲突的方法有拉链法和开放寻址法。1)拉链法使用数组实现的哈希表如图所示,数组中每个槽对应一条单链表。插入操作的基本原理是:根据哈希函数给出的哈希值,判断数组中该位置是否被占用,如果没有,则插入到此位置,如果被占用,则插入到单链表的头部(头插法)。查询操作的基本原理是:根据哈希函数给出的哈希值,如果数组中该位置没被占用,则代表查询的值不存在,如果该位置被占用,则在位置对应的单链表中顺序查找。算法题中,哈希表一般只有插入和查找操作。如果要实现删
2021-02-02 17:15:26
239
原创 并查集
目录定义实现思路代码模板定义并查集是一种树形的数据结构,主要支持这两个操作:1)询问两个元素是否属于同一个子集,即find操作;2)将两个元素所属的子集合并,即union操作。并查集可以在近乎O(1)O(1)O(1)的时间复杂度里完成上述两个操作。实现思路在并查集中,每个子集用一棵树来表示,树的根节点编号就是子集的编号。通常使用一维数组ppp来进行存储,p[x]p[x]p[x]表示节点xxx的父节点。1)如何判断是否为根节点?根节点的父节点为自身,因此,判断p[x] == x的真假即可判断是否
2021-02-01 20:11:52
151
原创 【LeetCode】1631.最小体力消耗路径(Path WIth Minimum Effort)
目录题目描述题目大意解题方法方法一:并查集题目描述You are a hiker preparing for an upcoming hike. You are given heights, a 2D array of size rows ×\times× columns, where heights[row][col] represents the height of cell (row, col). You are situated in the top-left cell, (0, 0), and
2021-01-30 22:22:35
313
原创 堆以及堆排序
堆堆是一棵完全二叉树。小根堆:每个父节点的值,都小于等于其子节点的值。因此,根节点的值为集合的最小值。大根堆:每个父节点的值,都大于等于其子节点的值。因此,根节点的值为集合的最大值。使用一维数组来存储堆。根节点的值存放在数组中索引值为1的位置。由于完全二叉树的特性,若父节点在数组的索引为xxx,则其左子节点的索引为2x2x2x,右子节点的索引为2x+12x+12x+1。(凡是完全二叉树,都是用一维数组来存储的)堆最核心的是up操作和down操作,使用这两个操作可完成以下堆(小根堆)主要支持的函数
2021-01-30 17:27:25
127
1
原创 【LeetCode】724.寻找数组的中心索引
目录题目描述题目大意解题方法方法一:前缀和题目描述Given an array of integers nums, write a method that returns the “pivot” index of this array.We define the pivot index as the index where the sum of all the numbers to the left of the index is equal to the sum of all the numbers
2021-01-28 15:43:50
114
原创 【LeetCode】1128.等价多米诺骨牌对的数量
目录题目描述题目大意解题方法方法一:排序+双指针方法二:计数题目描述Given a list of dominoes, dominoes[i] = [a, b] is equivalent to dominoes[j] = [c, d] if and only if either (a == c and b == d), or (a == d) - that is, one domino can be rotated to be equal to another domino.Return the n
2021-01-28 12:27:17
163
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人