
leecode
文章平均质量分 51
叫我AC
不写注释就是耍流氓
展开
-
leetcode—377. 组合总和 Ⅳ
377. 组合总和 Ⅳ难度中等给你一个由不同整数组成的数组nums,和一个目标整数target。请你从nums中找出并返回总和为target的元素组合的个数。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不...转载 2021-04-24 16:16:19 · 185 阅读 · 0 评论 -
leetcode—剑指 Offer 16. 数值的整数次方
剑指 Offer 16. 数值的整数次方难度中等149实现pow(x,n),即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.00000, n = -2输出:0.25000解释:2-2 = 1/22 = 1/4 = 0.25法1:暴力...原创 2021-04-24 14:55:45 · 170 阅读 · 0 评论 -
leetcode—剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先难度简单给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9...原创 2021-04-20 14:58:23 · 307 阅读 · 0 评论 -
leetcode—剑指 Offer 62. 圆圈中最后剩下的数字
剑指 Offer 62. 圆圈中最后剩下的数字难度简单0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出:3示例 2:输入: n = 10, m = 17输出:2约...原创 2021-04-19 17:21:22 · 246 阅读 · 0 评论 -
leetcode—旋转排序数组+二分法
33. 搜索旋转排序数组难度中等整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0 <= k < nums.length)上进行了旋转,使数组变为[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标从 0 开始计数)。例如,[0,1,2,4,5,6,7]在下标3处经旋转后可能变为[4,5,6,7,0,1,2]。...原创 2021-04-08 21:40:16 · 210 阅读 · 0 评论 -
回溯模板+leetcode——78. 子集 + 90. 子集 II
回溯法一般情况下,看到题目要求「所有可能的结果」,而不是「结果的个数」,我们就知道需要暴力搜索所有的可行解了,可以用「回溯法」。「回溯法」实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就「回溯」返回,尝试别的路径。回溯法是一种算法思想,而递归是一种编程方法,回溯法可以用递归来实现。回溯法的整体思路是:搜索每一条路,每次回溯是对具体的一条路径而言的。对当前搜索路径下的的未探索区域进行搜索,则可能有两种情况:当前未搜索区域满足结束条件,则保存当原创 2021-03-31 17:10:16 · 183 阅读 · 0 评论 -
leetcode—115. 不同的子序列
115. 不同的子序列给定一个字符串s和一个字符串t,计算在s的子序列中t出现的个数。字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE"是"ABCDE"的一个子序列,而"AEC"不是)题目数据保证答案符合 32 位带符号整数范围。示例1:输入:s = "rabbbit", t = "rabbit"输入:3解析:重点在这个 “选”,s 串有哪些选择,做出不同的选择会带来什么状态。...原创 2021-03-17 16:37:25 · 194 阅读 · 0 评论 -
leetcode—232. 用栈实现队列以及栈和队列的简单介绍和JAVA基本用法
232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现MyQueue类:void push(int x)将元素 x 推到队列的末尾 int pop()从队列的开头移除并返回元素 int peek()返回队列开头的元素 boolean empty()如果队列为空,返回true;否则,返回false说明:你只能使用标准的栈操作 —— 也就是只有push to top,peek...原创 2021-03-05 15:20:43 · 200 阅读 · 3 评论 -
leetcode—354. 俄罗斯套娃信封问题
354. 俄罗斯套娃信封问题难度困难385给定一些标记了宽度和高度的信封,宽度和高度以整数对形式(w, h)出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]输出: 3 解释: 最多信封的个数为 3, 组合为: [2,3..原创 2021-03-04 16:17:35 · 199 阅读 · 1 评论 -
Arrays.sort对二维数组进行排序
int res= [[5,4],[6,4],[6,7],[2,3]]Arrays.sort(res, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if (o1[0]==o2[0]) return o1[1]-o2[1];return o1[0]-o2[0];}});o1[0]-o2[0]表示对第一个元素进行升序,如果为o2[0]-o1[0]表示对第一个元素进行降序。o.原创 2021-03-04 15:31:02 · 643 阅读 · 2 评论 -
leetcode—300. 最长递增子序列,dp(动态规划)第一题
300. 最长递增子序列难度中等给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4...转载 2021-03-04 14:43:39 · 489 阅读 · 1 评论 -
leetcode—349. 两个数组的交集
349. 两个数组的交集难度简单330给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]本题主要考察数组去重,利用Set集合的不可重复性进行元素过滤。class Solution { public int[] intersection(int[] nums1, i.原创 2021-03-01 20:52:56 · 139 阅读 · 0 评论 -
leetcode—303. 区域和检索 - 数组不可变
303. 区域和检索 - 数组不可变难度简单278给定一个整数数组 nums,求出数组从索引i到j(i≤j)范围内元素的总和,包含i、j两点。实现NumArray类:NumArray(int[] nums)使用数组nums初始化对象 int sumRange(int i, int j)返回数组nums从索引i到j(i≤j)范围内元素的总和,包含i、j两点(也就是sum(nums[i], nums[i + 1], ... , nums[j]))...原创 2021-03-01 17:37:55 · 240 阅读 · 0 评论 -
leetcode—395. 至少有K个重复字符的最长子串
395. 至少有K个重复字符的最长子串难度中等303找到给定字符串(由小写字符组成)中的最长子串T,要求T中的每一字符出现次数都不少于k。输出T的长度。示例 1:输入:s = "aaabb", k = 3输出:3最长子串为 "aaa" ,其中 'a' 重复了 3 次。示例 2:输入:s = "ababbc", k = 2输出:5最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。递归-分治: 遍历统...原创 2021-02-27 12:54:43 · 283 阅读 · 1 评论 -
leetcode—1004. 最大连续1的个数 III
1004. 最大连续1的个数 III难度中等166给定一个由若干0和1组成的数组A,我们最多可以将K个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释: [1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,...原创 2021-02-19 10:40:08 · 238 阅读 · 1 评论 -
leetcode—292. Nim 游戏
292. Nim 游戏难度简单你和你的朋友,两个人一起玩Nim 游戏:桌子上有一堆石头。 你们轮流进行自己的回合,你作为先手。 每一回合,轮到的人拿掉1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为n的情况下赢得游戏。如果可以赢,返回true;否则,返回false。示例 1:输入:n = 4输出:false 解释:如果堆中有 4 块石头,那么你永远不会赢得比赛; 因...原创 2021-02-09 21:21:48 · 360 阅读 · 0 评论 -
leetcode—最长湍流子数组
方法一:滑动窗口设数组 arr 的长度为 n,窗口 [left,right] (0≤left≤right≤n−1) 为当前的窗口,窗口内构成了一个「湍流子数组」。随后,我们要考虑下一个窗口的位置。根据「湍流子数组」的定义,当 0<right<n-1 时:如果 arr[right-1] < arr[right]且 arr[right] > arr[right+1],则 [left,right+1]也构成「湍流子数组」,因此需要将 right 右移一个单位;如果 arr[r转载 2021-02-08 21:47:56 · 177 阅读 · 0 评论 -
leetcode—665. 非递减数列
665. 非递减数列难度简单给你一个长度为n的整数数组,请你判断在最多改变1个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的:对于数组中所有的i(0 <= i <= n-2),总满足nums[i] <= nums[i + 1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:输入: nums = [4,2,1]输...原创 2021-02-07 15:39:57 · 168 阅读 · 0 评论 -
leetcode—14. 最长公共前缀
14. 最长公共前缀难度简单编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。提示:0 <= strs.length <= 200 0 <= strs[i].length <= 20...原创 2021-02-07 11:11:28 · 131 阅读 · 0 评论 -
leetcode—1423. 可获得的最大点数
1423. 可获得的最大点数难度中等几张卡牌排成一行,每张卡牌都有一个对应的点数。点数由整数数组cardPoints给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿k张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组cardPoints和整数k,请你返回可以获得的最大点数。示例 1:输入:cardPoints = [1,2,3,4,5,6,1], k = 3输出:12解释:第一次行动,不管拿哪张牌,你的点数总是 1...转载 2021-02-06 23:46:25 · 260 阅读 · 0 评论 -
leetcode—13. 罗马数字转整数
13. 罗马数字转整数罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX...原创 2021-02-06 23:22:43 · 217 阅读 · 0 评论 -
LeetCode—1208. 尽可能使字符串相等,附滑动窗口模板
1208. 尽可能使字符串相等难度中等给你两个长度相同的字符串,s和t。将s中的第i个字符变到t中的第i个字符需要|s[i] - t[i]|的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将s的子字符串转化为它在t中对应的子字符串,则返回可以转化的最大长度。如果s中没有子字符串可以转化成t...转载 2021-02-05 11:38:02 · 278 阅读 · 0 评论 -
leetcode—283. 移动零
283. 移动零难度:简单给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数一开始的想法是计算0的个数,然后往后移动0,但是做了半天没有头绪。转而想到“快慢指针法”,定义两个指针变量,i和j,j变量保存不为0的数字。class Solution { public void moveZer...原创 2021-02-05 10:23:51 · 142 阅读 · 0 评论 -
leetcode—643. 子数组最大平均数 I
643. 子数组最大平均数 I给定n个整数,找出平均数最大且长度为k的连续子数组,并输出该最大平均数。示例:输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75提示:1 <=k<=n<= 30,000。 所给数据范围 [-10,000,10,000]。双重循环又超时了,超时的原因:每次的子数组不能重新计算,会超时,应该采用减去上一次的首端再...原创 2021-02-04 12:10:44 · 233 阅读 · 1 评论 -
leetcode—264. 丑数 II
264. 丑数 II编写一个程序,找出第n个丑数。丑数就是质因数只包含2, 3, 5的正整数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1是丑数。 n不超过1690。我的第一想法是先写一个函数判断这个数是否是丑数,然后通过一个for循环判断每个数是否是丑数,直到丑数的数量达到n。unfortunately,超时了。下面是超时代码:class Solution...原创 2021-02-04 11:03:34 · 151 阅读 · 0 评论 -
leetcode—480. 滑动窗口中位数
480. 滑动窗口中位数中位数是有序序列最中间的那个数。如果序列的大小是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。例如:[2,3,4],中位数是3 [2,3],中位数是(2 + 3) / 2 = 2.5给你一个数组nums,有一个大小为k的窗口从最左端滑动到最右端。窗口中有k个数,每次窗口向右移动1位。你的任务是找出每次窗口移动后得到的新窗口中元素的中位数,并输出由它们组成的数组。示例:给出nums=[1,3,-1,-3,5,3,6,7...原创 2021-02-03 12:26:30 · 246 阅读 · 0 评论 -
leetcode—263. 丑数
263. 丑数编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数2, 3, 5的正整数。示例 1:输入: 6输出: true解释: 6 = 2 ×3示例 2:输入: 8输出: true解释: 8 = 2 × 2 ×2我一开始的思路是求所给数字的所有质因数,然后这个数字的质因数保存到一个数组中,如果这个数组中包含了除2,3,5还有其他数字,那就不是丑数,如果只有2,3,5那就为丑数。很不幸,代码超时了。class Solution {//超时...原创 2021-02-03 10:53:07 · 201 阅读 · 0 评论 -
leecode—424. 替换后的最长重复字符
424. 替换后的最长重复字符难度中等249给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换k次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和k不会超过104。示例 1:输入:s = "ABAB", k = 2输出:4解释:用两个'A'替换为两个'B',反之亦然。这是一个用滑动窗口做的典型题目,因为之前没怎么接触过,所以根据题解,学习一下关于滑动窗口的知识点。可以分为三步:1.窗口初始宽...转载 2021-02-02 12:17:51 · 263 阅读 · 0 评论 -
leetcode—888. 公平的糖果棒交换
888. 公平的糖果棒交换爱丽丝和鲍勃有不同大小的糖果棒:A[i]是爱丽丝拥有的第i根糖果棒的大小,B[j]是鲍勃拥有的第j根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组ans,其中ans[0]是爱丽丝必须交换的糖果棒的大小,ans[1]是 Bob 必须交换的糖果棒的大小。如果有多个答案,你可以返回其中任何一个。保证答案存在。示例 1:输入:A ...原创 2021-02-01 18:09:45 · 196 阅读 · 0 评论 -
leetcode—839. 相似字符串组
如果交换字符串X 中的两个不同位置的字母,使得它和字符串Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。例如,"tars" 和 "rats" 是相似的 (交换 0 与 2 的位置);"rats" 和 "arts" 也是相似的,但是 "star" 不与 "tars","rats",或 "arts" 相似。总之,它们通过相似性形成了两个关联组:{"tars", "rats", "arts"} 和 {"star"}。注意,"tars" 和 "arts" ...原创 2021-01-31 22:18:01 · 233 阅读 · 0 评论 -
leetcode—206. 反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL方法一:递归算法class Solution { public ListNode reverseList(ListNode head) { if(head == null || head.next==null){//递归退出条件,当前为空,或者下一个节点为空 retu转载 2021-01-30 19:14:32 · 172 阅读 · 1 评论 -
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节
11原创 2020-12-15 20:09:25 · 428 阅读 · 0 评论 -
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
链表判断是否有环:可以采用快指针与慢指针的方式来解决。即定义一个快指针fast和一个慢指针slow,使得fast每次跳跃两个节点,slow每次跳跃一个节点。如果链表没有环的话,则slow与fast永远不会相遇(这里链表至少有两个节点);如果有环,则fast与slow将会在环中相遇。判断出链表有环以后,则需要算出进入环的第一个节点。在fast与slow第一次相遇后,设置一个节点pNode从链表的头部开始遍历,每次只遍历一个节点。这样,当fast与slow再次相遇时,pNode所处的位置便是环的首部。解题关原创 2020-12-10 21:45:21 · 386 阅读 · 0 评论