![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java力扣题
柯西极限存在准则
现任于西安华为研究所,阿里云社区专家博主,从事DBA的ISFJ+摩羯
展开
-
649.Dota2 参议院
如果目前仍然有夜魇方的议员,那么这名天辉方的议员只能行使「禁止一名参议员的权利」这一项权利。显然,该议员不会令一名同为天辉方的议员丧失权利,所以他一定会挑选一名夜魇方的议员。容易想到的是,应该贪心地挑选按照投票顺序的下一名夜魇方的议员。这也是很容易形象化地证明的:既然只能挑选一名夜魇方的议员,那么就应该挑最早可以进行投票的那一名议员;如果挑选了其他较晚投票的议员,那么等到最早可以进行投票的那一名议员行使权利时,一名天辉方议员就会丧失权利,这样就得不偿失了。所有失去权利的参议员将在过程中被跳过。原创 2024-04-09 13:24:07 · 481 阅读 · 0 评论 -
933.最近的请求次数
由于每次收到的请求的时间都比之前的大,因此从队首到队尾的时间值是单调递增的。当在时间 t 收到请求时,为了求出 [t−3000,t] 内发生的请求数,我们可以不断从队首弹出早于 t−3000 的时间。循环结束后队列的长度就是 [t−3000,t] 内发生的请求数。我们可以用一个队列维护发生请求的时间,当在时间 ttt 收到请求时,将时间 ttt 入队。写一个 RecentCounter 类来计算特定时间范围内最近的请求。保证 每次对 ping 的调用都使用比之前更大的 t 值。原创 2024-04-09 13:20:37 · 466 阅读 · 0 评论 -
394.字符串解码
如果当前的字符为右括号,开始出栈,一直到左括号出栈,出栈序列反转后拼接成一个字符串,此时取出栈顶的数字(此时栈顶一定是数字,想想为什么?),就是这个字符串应该出现的次数,我们根据这个次数和字符串构造出新的字符串并进栈。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。如果当前的字符为数位,解析出一个数字(连续的多个数位)并进栈。给定一个经过编码的字符串,返回它解码后的字符串。原创 2024-04-06 21:13:58 · 451 阅读 · 0 评论 -
735.小行星碰撞
碰撞规则:两个小行星相互碰撞,较小的小行星会爆炸。如果两颗小行星大小相同,则两颗小行星都会爆炸。两颗移动方向相同的小行星,永远不会发生碰撞。使用栈st 模拟行星碰撞,从左往右遍历行星数组asteroids,当我们遍历到行星aster时,使用变量alive 记录行星aster 是否还存在。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。给定一个整数数组 asteroids,表示在同一行的小行星。原创 2024-04-06 21:12:47 · 220 阅读 · 0 评论 -
内核常见面试题
分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,它含有一组其意义相对完整的信息,在程序中可以体现为代码段,数据段,是为了满足用户的需要。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费要比进程要小得多,同时创建一个线程的开销要比进程要小很多。每个段分配一个连续的分区,而进程中的各个段可以不连续地存放在内存的不同分区中。内核在内核空间中运行,在用户空间运行的正常程序,用户空间基本上是沙拳的一种形式,它限制用户程序,使他们不能惹的内存的其他程序或操作系统内核拥有。原创 2024-04-02 21:18:49 · 276 阅读 · 0 评论 -
2390.从字符串中移除星号
从遍历的顺序来看,最后遍历到了先删除,用栈来方便解决。给你一个包含若干星号 * 的字符串 s。最后把栈里的字符以逆序组成字符串即是答案。遍历字符,遇到*就弹出栈顶,否则就入栈。返回移除 所有 星号之后的字符串。原创 2024-03-20 21:40:23 · 349 阅读 · 0 评论 -
2352.相等行列对
给一个下标从0开始、大小为n x n的整数矩阵grid,返回满足Ri 行和 Cj 列相等的行列对(Ri,Cj)的数目。按照题目要求,对任意一行,将它与每一列都进行比较,如果相等,则对结果加一,最后返回总数。如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。原创 2024-03-20 18:41:58 · 321 阅读 · 0 评论 -
1657.确定两个字符串是否接近
给你两个字符串,word1 和 word2。如果 word1 和 word2 接近 ,就返回 true;否则,返回 false。2.分别将两个字符串的字符出现次数数组f1 和 f2 进行排序后,两个数组从小到大——相等。1.两个字符串出现的字符集S1和S2相等,即S1=S2.你可以根据需要对任意一个字符串多次使用这两种操作。原创 2024-03-19 17:20:39 · 369 阅读 · 0 评论 -
1207.独一无二的出现次数
使用哈希表记录每个数字的出现次数;随后再利用新的哈希表,统计不同的出现次数的数目。如果不同的出现次数的数目等于不同数字的数目,则返回true,否则返回false。如果每个数的出现次数都是独一无二的,就返回true;否则返回false。给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。原创 2024-03-16 13:46:00 · 239 阅读 · 0 评论 -
2215.找出两数组的不同
我们首先遍历哈希集合 set1 的每个元素,判断其是否位于 set2 中,如果不在,则我们将它加入 res[0]\textit{res}[0]res[0] 中;随后我们同样地遍历哈希集合 set2 的每个元素,判断其是否位于 set1 中,如果不在,则加入 res[1] 中。与此同时,由于哈希集合 set1 与 set2 中不存在重复元素,因此 res[0] 与 res[1] 也一定不存在重复元素。为了较快地判断一个数组的某个元素是否在另一个数组中存在,我们可以用哈希集合来存储数组的元素,并进行判断。原创 2024-03-16 13:45:11 · 173 阅读 · 0 评论 -
724.寻找数组的中心下标
记数组的全部元素之和为total,当遍历到第 i 个元素时,设其左侧元素之和为sum,则其右侧元素之和为total-numsi-sum.左右侧元素相等即为 sum=total−numsi−sum,即2*sum+numsi=total。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。给你一个整数数组 nums ,请计算数组的 中心下标。原创 2024-03-15 22:41:55 · 259 阅读 · 0 评论 -
1732.找到最高海拔
需要对数组gain进行一次遍历,在遍历到第 i 个元素时,使用前缀和思想维护前 i 个元素的和,并用和更新答案即可。给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0。有一个自行车打算进行一场公路骑行,这条路线总共由n+1个不同海拔的点组成。自行车手从海拔为0的点0开始骑行。原创 2024-03-15 22:41:15 · 163 阅读 · 0 评论 -
1493.删掉一个元素以后全为1的最长子数组
典型的滑动窗口问题,可以通过遍历数组并使用两个指针来解决,一个指针代表窗口的开始,另一个指针代表窗口的结束。当窗口全为1时,尝试扩大窗口直到遇到0为止,并记录下此时窗口的最大长度。在删掉元素的结果数组中,返回最长的且只包含1的非空子数组的长度。给一个二进制数组nums,从中删掉一个元素。如果不存在这样的子数组,请返回0.原创 2024-03-15 10:19:41 · 264 阅读 · 0 评论 -
1004.最大连续1的个数
使用滑动窗口来实时维护left 和 right 了。在 right 向右移动的过程中,我们同时移动 left,直到left 为首个。给定一个二进制数组nums 和一个整数k,如果可以翻转最多k个0,返回数组中连续1的最大个数。原创 2024-03-15 10:19:00 · 192 阅读 · 0 评论 -
1456.定长子串中元音的最大数目
1.右侧新进入窗口的字母为元音字母,左侧移出窗口的字母也是元音字母,这样一进一出抵消了。2.右侧新进入窗口的字母为元音字母,左侧移出窗口的字母非元音字母,此时元音字母个数+1。3.右侧新进入窗口的字母非元音字母,左侧移出窗口的字母为元音字母,此时元音字母个数-1。请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。英文中的 元音字母 为(a, e, i, o, u)。给你字符串 s 和整数 k。原创 2024-03-14 23:00:36 · 708 阅读 · 0 评论 -
643.子数组最大平均数
为了找到子数组的最大元素和,需要对数组中的每个长度为k的子数组分别计算元素和。对于长度为n 的数组,当 k≤n 时,有 n−k+1 个长度为 k 的子数组。如果直接计算每个子数组的元素和,则时间复杂度过高,无法通过全部测试用例,因此需要使用时间复杂度更低的方法计算每个子数组的元素和。规定了子数组的长度为k,因此可以通过寻找子数组的最大元素和的方式寻找子数组的最大平均数,元素和最大的子数组对应的平均数也是最大的。找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。原创 2024-03-14 22:59:47 · 343 阅读 · 1 评论 -
1679.K和数对的最大数目
每一步操作中,你需要从数组中选出和为 k 的两个整数,并将他们移出数组。给你一个整数数组nums和一个整数k。返回你可以对数组执行的最大操作数。原创 2024-03-13 10:12:24 · 307 阅读 · 0 评论 -
392.判断子序列
初始两个指针i 和 j ,分别指向 s 和 t 的初始位置。每次贪心地匹配,匹配成功则 i 和 j 同时右移,匹配 s 的下一个位置,匹配失败则 j 右移,i 不变,尝试用t的下一个字符匹配 s。s是否是 t 的子序列,因此只要能找到任意一种 s 在 t 中出现的方式,即可认为 s 是 t 的子序列。字符串的一个子序列是原始字符串删除一些字符而不改变剩余字符相对位置形成的新字符串。最终如果 i 移动到 s 的末尾,就说明 s 是 t的子序列。给定字符串s和t,判断s是否为t 的子序列。原创 2024-03-13 10:11:36 · 212 阅读 · 0 评论 -
283.移动零
创建两个指针i和j,第一次遍历的时候指针j用来记录当前有多少非0元素。即遍历的时候每遇到一个非0元素就将其往数组左边挪,第一次遍历完后,j指针的下标就指向了最后一个非0元素下标。给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。(必须在不复制数组的情况下原地对数组进行操作)第二次遍历的时候,起始位置就从j开始到结束,将剩下的这段区域内的元素全部置为0.原创 2024-03-13 10:10:32 · 451 阅读 · 0 评论 -
443.压缩字符串
在实际代码中,当读指针 read 位于字符串的末尾,或读指针 read 指向的字符不同于下一个字符时,我们就认为读指针 read 位于某一段连续相同子串的最右侧。我们使用变量 left 记录该子串的最左侧的位置,这样子串长度即为 read−left+1。特别地,为了达到 O(1) 空间复杂度,我们需要自行实现将数字转化为字符串写入到原字符串的功能。每次当读指针 read 移动到某一段连续相同子串的最右侧,我们就在写指针 write 处依次写入该子串对应的字符和子串长度即可。从一个空字符串 s 开始。原创 2024-03-13 10:09:44 · 256 阅读 · 0 评论 -
334.递增的三元子序列
(3) 如果third比first还小,那就把first指向third,然后继续遍历找third(这样的话first会跑到second的后边,但是不要紧,因为在second的前边,老first还是满足的)如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true;否则,返回 false。(2) 如果third比second小,但是比first大,那就把second指向third,然后继续遍历找third。原创 2024-03-11 21:02:18 · 450 阅读 · 0 评论 -
238.除自身以外数组的乘积
并更新数组 answer[i]=answer[i]=answer[i]∗R。然后 R 更新为 R=R∗nums[i],其中变量 R 表示的就是索引右侧数字的乘积。给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。1.初始化answer数组,对于给定索引 i ,answer[i] 代表的是i 左侧所有数字的乘积。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。原创 2024-03-11 21:01:02 · 521 阅读 · 0 评论 -
151.反转字符串中的单词
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。给你一个字符串 s ,请你反转字符串中 单词 的顺序。1.使用split将字符串按空格分割成字符串数组。3.使用join方法将字符串数组拼成一个字符串。2.使用reverse将字符串数组进行反转。原创 2024-03-08 11:04:54 · 208 阅读 · 0 评论 -
345.反转字符串中的元音字母
元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现不止一次。给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。原创 2024-03-08 11:00:53 · 165 阅读 · 0 评论 -
605.种花问题
给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。原创 2024-03-08 10:56:52 · 846 阅读 · 0 评论 -
1431.拥有最多糖果的孩子
因此,我们可以枚举每一个小朋友,并将额外的所有糖果都分给这个小朋友,然后再用 O(n) 的时间遍历其余的小朋友,就可以判断这个小朋友是否拥有最多的糖果。上述方法的时间复杂度为 O(n^2),然而我们可以将其优化为 O(n)。事实上,对于每一个小朋友,只要这个小朋友「拥有的糖果数目」加上「额外的糖果数目」大于等于所有小朋友拥有的糖果数目最大值,那么这个小朋友就可以拥有最多的糖果。对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。原创 2024-03-08 10:56:03 · 169 阅读 · 0 评论 -
1071.字符串的最大公因子
设前缀串长度为lenx,str1的长度为len1,str2的长度为len2,我们知道前缀串的长度必然要是两个字符串长度的约数才能满足条件,否则无法经过若干次拼接后得到长度相等的字符串,公式化来说,即。对于字符串 s 和 t,只有在 s = t + t + t + ... + t + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。给定两个字符串 str1 和 str2。由于题目要求最长的符合要求的字符串 X,所以可以按长度从大到小枚举前缀串,这样碰到第一个满足条件的前缀串返回即可。原创 2024-03-07 10:59:07 · 261 阅读 · 0 评论 -
1768.交替合并字符串
给你两个字符串 word1 和 word2。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。使用两个指针i和j,初始时分别指向两个字符串的首个位置。如果i没有超出word1的范围,就将word1[i]加入答案,并且将i移动一个位置;如果j没有超出word2的范围,就将word2[j]加入答案,并且将j移动一个位置。当i和j都超出对应的范围后,结束循环并返回答案即可。返回 合并后的字符串。原创 2024-03-07 10:58:07 · 214 阅读 · 0 评论 -
18.四数之和
最朴素的方法是使用四重循环枚举所有的四元组,然后使用哈希表进行去重操作,得到不包含重复四元组的最终答案。假设数组的长度是 nnn,则该方法中,枚举的时间复杂度为 O(n^4),去重操作的时间复杂度和空间复杂度也很高,因此需要换一种思路。使用上述方法,可以避免枚举到重复四元组,但是由于仍使用四重循环,时间复杂度仍是 O(n^4)。为了避免枚举到重复四元组,则需要保证每一重循环枚举到的元素不小于其上一重循环枚举到的元素,且在同一重循环中不能多次枚举到相同的元素。你可以按 任意顺序 返回答案。原创 2024-03-06 21:59:48 · 609 阅读 · 0 评论 -
17.电话号码的字母组合
回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是不完整的)。每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列。回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不可行的解。在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。原创 2024-03-06 21:58:12 · 197 阅读 · 0 评论 -
16.最接近的三数之和
题目要求找到与目标值 target 最接近的三元组,这里的「最接近」即为差值的绝对值最小。我们可以考虑直接使用三重循环枚举三元组,找出与目标值最接近的作为答案,时间复杂度为 O(N^3)。本题的N最大为1000,会超过时间限制。给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。假定每组输入只存在恰好一个解。原创 2024-03-04 15:07:17 · 348 阅读 · 0 评论 -
15.三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。你返回所有和为 0 且不重复的三元组。答案中不可以包含重复的三元组。原创 2024-03-04 15:06:02 · 142 阅读 · 0 评论 -
14.最长公共前缀
横向扫描,依次遍历每个字符串,更新最长公共前缀。另一种方法是纵向扫描。纵向扫描时,从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。原创 2024-03-02 13:41:53 · 297 阅读 · 0 评论 -
13.罗马数字转整数
通常情况下,罗马数字中小的数字在大的数字的右边。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。12 写做 XII ,即为 X + II。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。例如 XXVII 可视作 X+X+V+I+I=10+10+5+1+1=27。原创 2024-03-02 13:41:07 · 206 阅读 · 0 评论 -
12.整数转罗马数字
遍历 valueSymbols 中的每个数值-符号对,若当前数值 value 不超过 num,则从 num 中不断减去 value,直至 num 小于 value,然后遍历下一个数值-符号对。根据罗马数字的唯一表示法,为了表示一个给定的整数 num,我们寻找不超过 num 的最大符号值,将 num 减去该符号值,然后继续寻找不超过 num 的最大符号值,将该符号拼接在上一个找到的符号之后,循环直至 num 为 0。罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。原创 2024-03-01 22:57:00 · 335 阅读 · 0 评论 -
11.盛最多水的容器
给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。可以使用双指针作为左右边界(也就是【数组】的左右边界)计算出的容量中的最大值。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。原创 2024-03-01 22:00:01 · 213 阅读 · 0 评论 -
10.正则表达式匹配
题目中的匹配是一个「逐步匹配」的过程:我们每次从字符串 p 中取出一个字符或者「字符 + 星号」的组合,并在 s中进行匹配。对于 p 中一个字符而言,它只能在 s 中匹配一个字符,匹配的方法具有唯一性;而对于 p 中字符 + 星号的组合而言,它可以在 s 中匹配任意自然数个字符,并不具有唯一性。因此我们可以考虑使用动态规划,对匹配的方案进行枚举。给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。原创 2024-02-29 10:58:11 · 736 阅读 · 0 评论 -
9.回文数
给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。原创 2024-02-29 10:57:01 · 440 阅读 · 0 评论 -
8.字符串转换整数
5.如果整数数超过 32 位有符号整数范围 [−2^31, 2^31 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −2^31 的整数应该被固定为 −2^31 ,大于 2^31 − 1 的整数应该被固定为 2^31 − 1。4.将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。2.检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。3.读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。原创 2024-02-28 11:23:53 · 140 阅读 · 0 评论 -
7.整数反转
如果反转后整数超过32位的有符号整数的范围[−2^31, 2^31 − 1],就返回0.给一个32位的有符号整数x,返回将x中的数字部分反转后的结果。原创 2024-02-28 11:22:39 · 384 阅读 · 0 评论