自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 收藏
  • 关注

原创 Leetcode 870 Advantage Shuffle

给定全部由数字组成的数组nums1和nums2,求nums1的一个组合,使得nums1中的每一个数字都尽量比nums2中的字符大。如果nums1的值能赢,那就这一位就是nums1,如果赢不了,那这一位就是nums1中最小的值,来送人头。这题是田忌赛马的n维版本。首先会想到给nums1和nums2排序,对每一位进行比较。但由于我无法打乱nums2的顺序,可以用大顶堆来记录当前值和下标的关系。

2025-04-02 06:15:34 282

原创 Leetcode 438 Find All Anagrams in a String + Leetcode 567 Permutation in String(两题几乎一样)

给定两个字符串s和p,求s的子串所有的起点,满足这些子串是p的anagrams(字符的频率相同,但是可能顺序不同)定长滑动窗口,统计窗口内的字符是否是p的anagrams。空间复杂度:O(m) m为p的长度hu。时间复杂度:O(n) n 为s的长度。

2025-03-27 08:20:08 136

原创 Leetcode 3 Longest Substring Without Repeating Characters

可以用滑动窗口来解决问题,因为在这道题中窗口的左端点不会向左回退。需要存储一个map,字符和个数的hashmap。给定一个字符串,求出最长的无重复字符的子串。

2025-03-19 11:14:09 263

原创 Leetcode 160 Intersection of Two Linked Lists

两个指针分别从两个链表(记录为表A,表B)的表头出发,并且记录到表尾移动的步数,得到两个指针移动的步数之差。给定两个链表,找这两个链表第一个公共节点,如果没有返回nullptr。步数之差为正数,那么把表A的指针移动。然后两个指针移动到表尾,得到答案。步,否则移动表B的指针。

2025-03-18 05:59:11 479

原创 Leetcode 141 Linked List Cycle and Leetcode 142 Linked List Cycle II

可以用快慢指针来确定,由于快的那个指针一直在环中移动,慢的指针每次移动一步,二者一定会相遇,如果能相遇则说明有环。第二步假设从链表头到环的起点距离为a,相遇点为c,那么一定满足a+c+kb = 2(a+c),则满足a+c = kb,也就是说如果一个指针从链表头开始,另一个指针从相遇点开始走,那么两者相遇的点就是环的起点。给定一个环形链表,求找到链表的环的位置,返回一个指针(以Leetcode 142为例)

2025-02-26 13:06:38 684

原创 Leetcode 76 Minimum Window Substring

可利用滑动窗口求解。l代表滑动窗口的左端点,r代表滑动窗口的右端点。用一个map保存字符串t的计数。滑动窗口内的子串右端点不断移动,用另一个map保存这个滑动窗口内字符的计数,一旦这个滑动窗口内字符的计数包含t的计数,那么就可以移动滑动窗口的左端点,从而找到最短的子串。给定一个字符串s以及字符串t,求长度最短的s的子串,该子串包含所有字符串t中的字符。

2025-02-20 13:41:31 308

原创 Leetcode 980 Unique Path III

先计算出有多少不是墙的点。然后从起点开始做dfs,对每一层dfs到当前位置有多少个不是墙的点与之前算出的结果进行比对,如果相等并且此时已经遍历到了终点,那么说明找到了一条路径。给定一个二维矩阵,0代表空地,1代表起点,-1代表墙,2代表终点,求从起点出发,走到终点,并且能够经过所有的空地,一共有几条唯一路径。首先求多少条路径问题我们一开始会想到dp,但是这一题不行,因为我要经过所有的空地,所以必须dfs求解。, m为数组的长度,n为数组的宽度。k为所有不包括障碍的格子数量。算法复杂度:指数级,近似为。

2025-02-17 11:33:24 255

原创 Leetcode 526 Beautiful number

用一个长度为n+1的数组(因为下标从1开始),来记录1-n是否已经选过。用dfs对数列中的每一个位置i搜索如果nums[i]能被i整除,或者i被nums[i]整除。如果最后形成的数列长度为n那么这样的数列就是满足条件的。n个数组成排列,排列的下标为i从1开始,并且排列中的每一个数都满足性质,nums[i]能被i整除,或者i被nums[i]整除,求一共有多少个这样的数列。

2025-02-17 02:13:58 328

原创 Leetcode Unique Path II

可以用dp,dp[i]][j]代表对于走到坐标(i, j)有多少条不同的path,注意初始化的时候第0行和第0列,如果有blocker,那么从当前石头开始,当前行或者列都没有。给定一个m*n的矩阵,从右上走到右下,记1为blocker无法通行。问有多少条不同的path。

2025-01-30 15:35:15 198

原创 Leetcode 62 Unique Path

动态规划,走到第i,j的位置,dp[i][j]是dp[i-1][j]的路径和dp[i][j-1]的路径。有m*n的矩阵,从(0, 0)位置走到(m-1, n-1)有多少种不同的走法。

2025-01-12 09:57:14 327

原创 Leetcode 967 Numbers With Same Consecutive Differences

dfs,有k位置要选,第一个位置我可以从1-9中选择,第二个位置是前一个位置的+k或者-k,要满足加减后的值满足>= 0并且 < k。注意k == 0的时候有重复,要去重。给定n,代表整数的长度,给定k代表两个相邻数字之间的间隔。求所有的值构成的组合。

2025-01-11 23:37:43 321

原创 Leetcode 698 Partition to K Equal Sum Subsets

这k个子集每个子集的元素和假设为a。当当前子集的值小于等于需要的值的时候我们可以放,并且回溯。当最后一个数字被放入并且每个桶的元素和都能够满足为a时,那么就说明能够分成k份。给一个数组,要求把数组里的元素分成k个子集,满足每个子集中数的总和是相等的。问是否能分成k个子集。想象你有k个桶,然后你有n个小球,你要做的是把这n个小球放进k个桶里,问能不能放成。最暴力的办法就是遍历所有的球,看看第一个桶能不能放,第二个桶能不能放。剪枝:1. 可以从大到小排序,这样可以先放大的数字,子集会更早达到元素和a。

2025-01-11 13:05:32 318

原创 Leetcode 3403 Find the Lexicographically Largest String From the Box I

枚举起始位置,对于每一个起始位置而言,Lexicographically最大的字符串的长度是(word.size() - numFriends + 1)和(n-i+1)的较小值。记录每个起始位置的字符串并且比较。一段字符串可以分割成numFriends份,每一份满足不为空,求其中最大的 Lexicographically Largest String是什么字符串。首先对于同一个起始位置的字符串而言,字符串越长,Lexicographically越大。由于每一份字符串不为空,所以字符串的长度是有个最大值的。

2025-01-04 03:23:24 330

原创 22 Generate Parentheses

用dfs,记当前的左括号个数为l,当前的右括号个数为r,string保存遍历到当前位置的字符串。当string的括号总共为2*n时,把string添加入答案。当左括号的个数少于n时,添加一个左括号并进入下一层dfs,然后回溯。当右括号的个数小于左括号并且少于n时(保证括号有效),添加一个右括号,然后回溯。给定的一个n,生成n对有效的括号对。

2025-01-03 08:58:20 265

原创 Leetcode 1254 Number of Closed Islands + Leetcode 1020 Number of Enclaves

给定一个m*n的矩阵含有0和1,1代表水,0代表陆地,岛屿是陆地的集合,如果一个岛屿和四个方向的边界相连,则不算封闭岛屿。求有多少个封闭的岛屿。

2025-01-01 07:32:50 338

原创 Leetcode 1905 Count sub Islands

这题跟number of islands很像,但是唯一不同的是计数方式,除了把岛2中的已经遍历过的岛mark成visited之外我还需要有一个返回值来判断这个岛屿是不是sub islands,判断的方法是如果岛2中的岛屿中的点有一个在岛1的矩阵中为0那么我就不认为这是一个sub island。grid1和grid2中有很多不同的岛屿(由1构成),如果grid2中有一个岛屿满足这个岛屿所有的点在grid1矩阵中为都为’1’,那么这个岛屿被认为是一个sub island。m,n是grid的长宽。

2024-12-25 09:31:31 291

原创 Leetcode 200 Number of Islands

遍历二维矩阵,从遍历到之前没有visit到的1开始dfs, dfs是用来mark 已经遍历到的点为visited过。并且每次遇到没有visit过的1时计数。给定一个二维矩阵,只含有0和1,1连接成片构成岛屿。求有多少个这样的岛屿。m,n 为二维矩阵的长宽。m,n 为二维矩阵的长宽。

2024-12-25 08:29:01 344

原创 Leetcode 695 Max Area of Island

遍历二维矩阵,当遇到没有被访问过的1时,开始进行dfs,记此时的1坐标为x,y。dfs返回从(x,y)出发,能到达的所有岛屿格的数量。给定一个二维矩阵,矩阵中包含0和1,所有相连的1被视为一个岛屿,求这些所有岛屿的最大区域是多少。,你需要统计4个方向的答案再返回。m,n是二维矩阵的长宽。m,n是二维矩阵的长宽。

2024-12-25 08:13:43 312

原创 Leetcode 37 Sudoku Solver

格子而言,我都可以从1填到9,一共有81个格子,可以想像一颗有81层,每一个分支从1选到9的值。因为如果是个void function,不返回true活着false,上一层函数就不知道信息。比如我需要从S走到E,如果不返回值,当找到一条正确路径的时候,上一层的dfs会擦除路径。的格子,从1填到9,当填完所有的81个格子时停下并且返回当前填空的状态。的小块满足只有从1到9的字符,一定且仅有唯一的答案。解决一个数独问题,有一个9*9 的矩阵,其中是。满足每一行每一列,以及每一个。对于数独来说,对于每一个。

2024-12-21 09:16:37 492

原创 Lintcode 197 Permutation Index

给定不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号,编号从1开始。比如[1,2,3]是字典序中的第一个,那么return 1。首先对于第一位来说,我要找到比3小的数,1和2,这些数字开头的序列字典序肯定比[3,1,2,4]小,以这些数字为开头的有。个, 接下来第一位就固定为3了,看第二位,第二位没有比1小的,那排在以3,1开头前面的有。假设我要找[3,1,2,4]排第几个。为在第n位之后,比第n位小的数字个数。有树状数组的解法,能快速求解。

2024-12-17 11:31:51 965

原创 Leetcode 399 Evaluate Division

诸如a/b = 3, b / c = 2的等式实际上可以转化成图,a, b, c为顶点,a->b = 3, b -> c = 2, b -> a = 1/3, c->b = 1/2, 比如a/c其实就是在求a->c的权重是多少。给定一系列除法等式,比如a/b = 3, b/c = 2, 有一个query array,求诸如a/c 的答案。对于这道题而言,bfs会相对比较慢,因为他要维护更多的状态(维护起点到某个点的权重)V是图的顶点数E是图的边数。

2024-12-17 02:06:29 295

原创 Leetcode 3379 Transformed Array

给定一个循环数组,如果nums[i]为负数,则结果的第i位是原数组中第i位移动nums[i]长度的那个数字。如果nums[i]为正数,那么向右移动,如果nums[i]为负数,那么向左移动。例如[1,2],那么返回的答案为[2,2]很容易理解的模拟题,利用。

2024-12-12 20:49:03 312

原创 leetcode 31 Next Permutation

找到下一个permutation是什么,对于一个数组[1,2,3],下一个排列就是[1, 3, 2]

2024-12-12 02:01:25 237

原创 Leetcode 785 Is Graph Bipartite

比如0-1-2 给1染色后,还需要递归到2,检查2的邻居是否会产生冲突。如果只给1染色不递归,就会漏掉2的检查。给定一个图的邻接矩阵,判断一个图是不是二分图。用两种颜色去涂色,任意有边的两个节点不能涂上相同的颜色。为什么是这个,不是检查当前节点的邻居就可以了么,为什么我还要递归?对每一个没有着色的节点做dfs,将他的相邻节点染色成不同的颜色。如果发现相邻节点已经染色并且颜色相同,则不是二分图。遍历每个节点,用1和-1来表示两种色彩。只会检查未染色的节点。m是节点数,n是边数。

2024-12-05 15:39:37 350

原创 Leetcode 3371 Identify the Largest Outlier in an Array

给定一个数组,数组包含n个元素,其中n-2个元素称为special number,其余两个元素一个是这些special number的元素和, 另一个称为outlier,我要找到最大的outlier。枚举所有的元素,假定第i位元素是outlier,那么剩下来的元素,其中有一个元素一定是所有special元素的和,也就是。这题的数字范围是10^5,我需要一个O(n)的解法,判断某个元素是这些special number的元素和是比较容易的,可以用hashmap来做。,可以用之前的hashmap来判断。

2024-12-04 03:56:08 527

原创 Leetcode 303 Range Sum Query - Immutable

前缀和模版题,初始化前缀和数组并且求下标从left到right的元素和。

2024-12-03 10:03:39 247

原创 Leetcode 131 Palindrome Partition

题意:把一个字符串分割成多个回文字符串的partition,返回所有的可能partion。题解:dfs,只是中间判断的条件变成了每一个小的block是否是回文。每个dfs的下一轮必须要是。输入的参数是起点以及长度。,因为空字符串不算。

2024-11-27 11:54:18 347

原创 Leetcode 47 Permutation II && Leetcode 40 Combination sum II

题解:需要排序(为了去重),有一个vis数组,是用来判断当前位置的数字是否已经选过了。定义一个dfs,每一层dfs都是扫描整个数组,并且根据vis数组选数字。已知对于每一层dfs,我不能选择重复的数字,因为对于同一层dfs选择哪个重复的数字得到的答案一定是相同的。题解:需要排序,定义一个u,从第u位往后挑数字,如果和<= k,那就进入下一层dfs继续挑选。题意:给定一个数组,从数组中选数字,求所有和为target的组合,有重复数字。题意:给定含有重复数字的数组,求他所有的排列。去除那些不在同一层的数字。

2024-11-27 08:01:16 293

原创 Leetcode 290 word Pattern

可以保存两个map,其中一个map映射pattern到数组下标,另一个map映射string到数组下标。题意:给定两个字符串p和s,其中一个字符串p表示另一个字符串的pattern。例如,“aaa”, 另一个字符串含有"good good good".求输入的两个字符串是否具有这样的匹配关系。如果都没有出现过,那么给两个map赋值为下标,如果其中一个出现过,另一个没有出现过,那么返回false,如果对应的特征值不相等,返回false,最后返回true。

2024-11-26 07:02:26 596

原创 Leetcode 44 Wildcard matching

如果p[j-1]是*, 那么一种情况,p[j-1]匹配空串,s[0 …j-2]能匹配上(f[i][j-1]),第二种情况是p[j-1]匹配的不是空串,s[0…j-1]能匹配上(f[i-1][j])注意在这种情况下f[i-1][j]和f[i-2][j]具有传递性,因为’*'会传递。j-2]能匹配上(f[i-1][j-1])并且如果p[j-1]是?题解: 定义f[i][j]是s的前i个字符和p的前j个字符是否能匹配上,需要分两种大情况来讨论。注意此时s[i-1]和p[j-1]是定义中s和p的最后一位。

2024-11-26 01:28:29 379

原创 Leetcode 51 N Queens && Leetcode N Queens II

代表在第i行第j列放一个皇后。当数组满足长度要求时dfs结束。传入参数u表示当前我需要在第u行加入一个皇后,遍历所有n列,判断我皇后是否可以放入,如果可以放,那么就放,进入下一层dfs。,形成n*n的棋盘,棋盘上放n个皇后,确保皇后之间不会相互吃(皇后可以直线吃,斜线吃)题解:首先这是一道dfs,枚举所有可以放n皇后的地方。构造一个数组pos,

2024-11-25 00:00:38 421

原创 Leetcode 20 Valid Parentheses

题解:从左到右扫描遇到左括号进入栈中,不是左边括号,先看栈里是否为空,为空那就没有与右边括号匹配的括号,如果不为空,需要有与之匹配的括号。最后检查栈是否为空(左括号是否剩余)题意:给定含有"(“, “{”,”[“, “}”,”]", "}"的字符串。

2024-11-22 06:42:51 260

原创 Leetcode 39 Combination Sum & lintcode 90 K sum II & Leetcode 40 Combination Sum II

比如说我有[1, 1, 1, 3]数组么,target = 5, 原因是对于每一层dfs,选第一个1,和第二1或者第三个1都是一样的。lintcode 90 K sum II 更为简单,不能选重复位置的数字,但是数组里本来就没有重复值,为leetcode 40的简化版。题解:dfs,有一个u记录我当前从u位数字开始选,每一层dfs我都从第u位往后面选择数字放进tmp数组中。题解:和39类似,但是唯一不同的是有重复数字以及不可以重复选相同位置的数字,要先排序对每一层dfs中,不可以重复选,有重复数字。

2024-11-20 10:20:22 325

原创 Leetcode 215 Kth largest Element in an array

heap中保存的应该是前k大的元素,前k大的元素我可以用一个最小堆维护,如果堆中元素个数小于k,或者当前扫描的数字大于堆顶我就放进堆中。扫描结束后,堆顶的元素就是答案。不断交换i和j的元素,直到 i > j, 那么在这次的iteration中, [l, j], [j, i][i,r]分成了三个区间,j,i之间只有一个元素。为l和r的中点元素,并且有i,j两个指针从数组两端开始,一旦有指针i指向的元素大于pivot就停下,指针i指向的元素小于pivot就停下,此时表明。题意:求一个数组中第k大的元素。

2024-11-19 02:25:22 400 1

原创 Leetcode 3355 Zero Array Transformation

题意:给定一个长度为 n的int数组以及一个2D array, 有一个query数组,每个数组里的数[Li, Ri]代表这个区间的子集区间的数都减1,求这个数组在经过这个query数组之后能否变成全部为0的数组。题解:用差分数组可以解决,计算经过这么多个query之后如果数组中所有的值都小于等于0,返回true。如何还原:[8, 8+(-6), 8+(-6)+1, 8+(-6)+1 + 2]差分数组求前缀和就是原答案,注意nums[0]特殊对待。查分: [8, -6, 1, 2]

2024-11-19 01:28:43 273

原创 Leetcode 3354 Make Array Elements Equal to Zero

一开始可以选择向左向右移动, 如果nums[cur] > 0, 那就 nums[cur] -= 1,并且移动的方向变更,求多少个cur的位置以及向左向右的方式能够使nums中的所有数字变化成0(想象一个球里面撞来撞去)题解:本质上是找到一个每一个nums[cur] == 0的点,这个位置的左边所有数的和以及右边所有数的和相等或者相差1,如果是相等的话答案+2,如果相差1的话答案+1。题意:给定一个数组arr,有个。

2024-11-18 14:18:50 269

原创 Leetcode 743 Network Delay Time

比如这题我从节点2出发,发现2能到1和3,由于此处2到1和3的距离一样,所以优先处理哪个节点都可以,这里取1,那1的最短路就定下来了,没有节点和1相连所以不用更新距离信息。然后处理节点3,2到3的距离确定,3还可以到4,那2到4的节点距离就确定下来了,以此类推。题意:给定n个节点的网络,以及节点之间传输的时间,求从节点k出发传输信息,最少需要多久,所有的节点都能够接收到信息。,代表从节点2出发,到1的距离为1,到2的距离为2(距离在前的话我不用修改小顶堆的函数)该算法的原理是,从给定的节点。

2024-11-14 09:52:35 893

原创 Leetcode 26 Remove duplicate elements

解法二:双指针,但是判断的条件是略有不同,是判断j指向元素和i指向元素是否重复,代码更为简洁。解法:双指针,i记录答案,j遇到重复的值就往后跳过。题意:在有序数组中删除重复元素。

2024-11-14 06:00:27 389 2

原创 Leetcode 283 Move Zeroes

题意:给定一个数组,把非0元素放在前面,把0放在后面,而且要确保相对位置不变。不能用对撞双指针的方法是因为需要确保相对顺序。

2024-11-14 05:27:40 421 1

原创 Leetcode 969 Pancake Sorting

解法:我首先先想到需要有个指针移动,让每一个数字都在正确的位置上。从前往后的指针不合适,因为每一次pancake操作都会让从前往后的元素乱序。题意:给定一个数组,用pancake操作使得整个数组从小到大排列,返回pancake操作的数组。,记录下最大值的位置pos,把[0:pos]数组进行pancake操作,这样最大值成了。每一次pancake操作是把[0,k-1]的元素reverse。,再reverse一下,那么nums[i]的元素就确定下来了。指针i, j, i从后往前遍历,j遍历。

2024-11-14 02:50:19 431

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除