
力扣
蛋卷在月球烤面包
这个作者很懒,什么都没留下…
展开
-
力扣895 最大频率栈
思路:对有序队列里的元素按照频率排序,如果频率相同,根据index比较得到更大的数,表示离栈顶更近。原创 2022-08-27 16:46:03 · 251 阅读 · 0 评论 -
力扣459 重复的子字符串
所以可以直接判断 str 中去除首尾元素之后,是否包含自身元素。则表明存在重复子串。一开始 acd (acd) ,移动一次 ac(dac)d,移动两次 a(cda)cd。acd 移动的可能:dac、cda。其实都包含在了 str 中了。比如字符串:S = acd,那么 str = S + S = acdacd。...原创 2022-08-06 15:58:23 · 163 阅读 · 0 评论 -
力扣120 三角形最小路径和
思路:首先尝试用自顶向下的方法求dp结果,但是从上到下每个list的长度从小到大,所以需要考虑边界值,比较麻烦,所以从下往上遍历。原创 2022-08-04 13:08:25 · 147 阅读 · 0 评论 -
力扣208 实现Trie(前缀树)
代码】力扣208 实现Trie(前缀树)原创 2022-08-03 20:08:48 · 105 阅读 · 0 评论 -
力扣45 跳跃游戏 II
以 i = 0 为起点,nums[0]=2,说明当前能到达的最远距离是i=2,在遍历到i=2的过程中计算每个点最远的距离,取最大值,当i=2,说明已经达到了之前i=0时的最大距离,而i=1和i=2可以作为下一轮新的起点,新一轮的最远距离就是在遍历i=1和i=2时得到的最大距离。输入: nums = [2,3,1,1,4]...原创 2022-08-03 18:26:44 · 937 阅读 · 0 评论 -
力扣16 最接近的三数之和
思路:采用双指针left和right分别指向当前下标i的右侧区间的最左和最右,计算sum=nums[i]+nums[left]+nums[right]三数之和,和target比较,移动左右结点,取相差最小的sum作为结果返回。原创 2022-08-03 16:36:40 · 199 阅读 · 0 评论 -
力扣189 轮转数组
首先将整个数组整体翻转,然后以k作为临界点左右各自翻转。原创 2022-08-03 16:14:42 · 130 阅读 · 0 评论 -
力扣329 矩阵中的最长递增路径
思路先创建dp数组,dp[i][j]表示以matrix[i][j]为结尾的最长路径,将所有点放入list中进行排序,然后遍历list中的每个节点,访问当前节点的上下左右并比较大小得到最终值。,将matrix的每个数都作为路径的起点进行深度优先遍历,每访问一个起点,计算以它的上下左右为起点的最长路径是多少,取四个值中的最大值加一,得到当前数做起点的最大路径长度。思路遍历二维数组,首先检查下标是否正确,其次设置了pre的值,用于存储上一个结点的值,visited数组中,方法一dfs(效率更高)...原创 2022-08-01 17:17:08 · 221 阅读 · 0 评论 -
力扣572 另一棵树的子树
思路采用先序遍历的思想遍历二叉树。原创 2022-08-01 11:51:03 · 138 阅读 · 0 评论 -
力扣125 验证回文串
思路设置双指针分别指向字符串的左右两端,判断两个指针是否都指向字符或数字,如果是,再去判断大小写字母情况。原创 2022-07-31 21:15:16 · 122 阅读 · 0 评论 -
力扣384 打乱数组
思路遍历整个数组,从下标0开始,使用random随机得到一个数,这个数作为下标,和下标0对应的数做交换,random取随机数的过程,只能在当前下标的右侧取,可以自己和自己交换。原创 2022-07-31 19:14:58 · 146 阅读 · 0 评论 -
力扣135 分发糖果
思路:设学生 A 和学生 B 左右相邻,A 在 B 左边:从左往右遍历rating数组,当ratingA < ratingB 时 leftB=leftA+1。从右往左遍历rating数组,当ratingA > ratingB 时 leftA=leftB+1。将两次结果取最大值,因为这样才能同时满足以上规则。...原创 2022-07-31 18:44:46 · 146 阅读 · 0 评论 -
力扣440 字典序的第K小数字
sum==k时,由于nodeCount()方法是将cur也算在内的,多算了一次cur结点才导致相等,实际sum是小于k的,所以如果sum==k时说明需要到cur+1为根节点的十叉树上查找。因此利用nodeCount()方法求当前结点所在十叉树,在不超过n的情况下的节点总数sum。思路可以将字典想象成一个十叉树。...原创 2022-07-29 15:50:18 · 141 阅读 · 0 评论 -
力扣11 盛最多水的容器
设置两个指针,分别从数组的两边开始向中间遍历。由于盛水的多少是根据两边柱子较低的那一边的高度决定的,而为了找到能盛最多水的容器,需要找到两边最高的柱子,计算结果即可。(和接雨水的思路较为相似)...原创 2022-07-28 21:02:30 · 241 阅读 · 0 评论 -
力扣26 删除有序数组中的重复项
思路设置双指针,slow表示有序数组的终点,fast用于遍历整个数组,如果slow和fast指向的数值不同,向前移动slow并赋值nums[fast],最终返回slow+1表示有序数组的长度。原创 2022-07-28 20:38:19 · 164 阅读 · 0 评论 -
力扣59 螺旋矩阵 II
更新边界例如从左到右填完后,上边界top+=1,相当于上边界向内缩1。执行num+=1得到下一个需要填入的数字;定义当前左右上下边界。原创 2022-07-27 21:17:43 · 141 阅读 · 0 评论 -
力扣70 单词搜索
思路可以参考岛屿问题的解法,先遍历找到和word第一个字符相同的坐标,然后以这个坐标为起点用dfs算法遍历其上下左右的字符是否符合条件,由于遍历的时候对坐标上的字符进行修改,遍历后还需要回溯。...原创 2022-07-26 14:39:34 · 112 阅读 · 0 评论 -
字节高频题补充 检测循环依赖
若给定一个依赖关系是[[0,2],[1,2],[2,3],[2,4]],如图所示。入度为0的点现在只有点2,把它记录下来;重复1和2,直到图为空或没有入度为0的点。选择图中一个入度为0的点,记录下来。在图中删除该点和所有以它为起点的边。选择入度为0的节点,比如选择。解决这类问题的利器就是——如果是循环依赖,可以使用。其中,n为点的个数。.........原创 2022-07-25 21:14:49 · 1150 阅读 · 0 评论 -
力扣560 和为 K 的子数组
遍历nums数组,计算preSum,如果map中有preSum-k的键值对,将其出现次数加到结果上。因为如果map中已经有preSum-k,说明中间一定相邻数相加为0,或者当前遍历的数就是0。nums的第i到j项的和,有nums[i]+…+nums[j]=preSum[j]−preSum[i−1]引入前缀和的方法,定义数组preSum[x]第0项到第x项的和。满足preSum[j]−preSum[i−1]==k。计算完结果后将preSum写入map中。...原创 2022-07-25 20:29:53 · 118 阅读 · 0 评论 -
力扣498 对角线遍历
思路以[[1,2,3],[4,5,6],[7,8,9]]为例,三行三列,需要遍历五次,每次遍历需要先判断奇偶,然后根据题意确定遍历的方向。每次遍历结束后需要判断临界值,然后设置下一轮遍历的起点。原创 2022-07-18 15:16:51 · 150 阅读 · 0 评论 -
力扣283 移动零
方法一:第一次遍历将每个不为零的数存到数组前面,第二次遍历再把数组后面的部分填0.方法二:left用于指向为0的数,right遍历到不为0的就和left交换,借用了快排的思想。原创 2022-07-11 21:42:41 · 124 阅读 · 0 评论 -
力扣468 验证IP地址
需要注意的点:这个条件可以根据ASCii码写成: 因为ASCii码如下:原创 2022-07-08 16:26:41 · 90 阅读 · 0 评论 -
力扣18 四数之和
思路:借鉴三数之和的思想,先固定k,判断k和k-1是否相等,然后再按照三数之和思路固定i,用j和h作为left和right,根据sum值调整j和h。原创 2022-06-26 11:20:18 · 102 阅读 · 0 评论 -
力扣14 最长公共前缀
思路:将strs[0]的字符串作为参考,和数组中的字符串进行对比,保留公共前缀,再继续遍历剩余字符串,最后得到最长公共前缀。原创 2022-06-05 17:19:46 · 84 阅读 · 0 评论 -
力扣470 用 Rand7() 实现 Rand10()
简单来说就是,前半部分是为了保证与后半部分的每一位数字依次组合没有重叠。举例:以上参考: 力扣-题解因此,可以得到以上结论。反之,如果要rand4()实现rand2(),由于需要得到的数在[1,2]区间内,因此需要取余运算,再加1即可。事实上,只要中N是2的倍数,就都可以用来实现,反之,若N不是2的倍数,则产生的结果不是等概率的。要通过rand7()实现rand10(),根据Part1的推论,可以通过(rand7()-1)*7+rand7()=rand49()得到rand49(),但是49并不是原创 2022-06-05 10:29:00 · 194 阅读 · 0 评论 -
力扣165 比较版本号
思路:使用双指针分别指向两个字符串,只需比较当前指针指向的数字大小即可,用Integer.parseInt()解决1和001相等的问题。原创 2022-06-05 10:10:04 · 101 阅读 · 0 评论 -
力扣43 字符串相乘
方法一:思路:根据乘法运算的法则,遍历num2的每一位,和num1相乘,注意移位规律,最后相加可得结果。 方法二:思路:乘数 位数为 M,被乘数 位数为 N, 结果 最大总位数为 M+N。有两个指针 在 和 上游走,计算乘积,同时将乘积叠加到 的正确位置。...原创 2022-06-03 17:09:40 · 145 阅读 · 0 评论 -
力扣31 下一个排列
思路:如果整个数字都是降序的,说明已经到最后一个排序了,因此下一个排列就是Arrays.sort(nums),因此需要找升序的两个相邻数字,找到后将右侧的数字排序,找到比nums[i-1]大的数字,交换位置,返回这个结果。原创 2022-06-01 15:30:21 · 106 阅读 · 0 评论 -
力扣41 缺失的第一个正数
思路:根据题意,要找的缺失正整数一定在[1,len+1]中,len+1的情况是nums={1,2,3,4}时的结果。将数组想成hashmap数组,hash算法是nums[i-1]=i,while循环交换数组元素的位置,最后遍历数组,找到第一个不符合hash算法的位置,坐标+1就是结果,如果遍历完没有找到不符合的,返回len+1。public int firstMissingPositive(int[] nums) { int len=nums.length; for(i原创 2022-05-30 21:55:57 · 163 阅读 · 0 评论 -
力扣8 字符串转换整数 (atoi)
思路:需要注意几个题目要求输入的字符串表示的数超出整数范围 每轮for循环时结果的计算 if判断的顺序public int myAtoi(String s) { String str=s.trim(); char[] array=str.toCharArray(); int res=0; int sign=1; for(int i=0;i<array.length;i++){ if(i=原创 2022-05-30 20:43:22 · 157 阅读 · 0 评论 -
力扣450 删除二叉搜索树中的节点
思路:先根据二叉搜索树的性质查找目标结点,找到之后判断这个节点左右子节点是否为空,都不为空:遍历右子树的左节点,找到最左的叶子结点作为新的根节点。 public TreeNode deleteNode(TreeNode root, int key){ if(root==null) return null; if(key>root.val){ root.right=deleteNode(root.right,key); .原创 2022-05-10 20:09:16 · 148 阅读 · 0 评论 -
力扣767 重构字符串
思路:先求出当字符串重构后合理情况下,a最多能有多少个:因此先求出给定的字符串s的长度,然后遍历字符串找到数量最多的那个'a',先比较'a'的数量是否为字符串长度的一半,如果是,说明这个字符串可以合理地重构,初始化一个数组,把'a'放在偶数下标的位置,然后依次填满数组即可。public String reorganizeString(String s) { char[] array=s.toCharArray(); int[] alphaCount=new i.原创 2022-05-02 16:32:10 · 212 阅读 · 0 评论 -
力扣315 计算右侧小于当前元素的个数
思路:可以看作是查找逆序对的个数。通过归并排序,可以在比较两个数大小的时候知道逆序对的个数,但是如果真的排序,会破坏掉原本数组的顺序,对后续的查找逆序对有影响,因此选择创建一个数组存放下标,每次排序都是对下标排序。public List<Integer> countSmaller(int[] nums){ List<Integer> list=new ArrayList<>(); int len=nums.length;..原创 2022-05-02 15:04:43 · 463 阅读 · 0 评论 -
会议室合集
题目:给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。示例:输入: [[0, 30],[5, 10],[15, 20]]输出: 2输入: [[7,10],[2,4]]输出: 1类似思路可参考力扣56 合并区间堆里的每个元素表示每个房间使用的结束时间。首先对原始数组排序,使得每段时间的起始时间是从小到.原创 2022-04-29 11:03:39 · 260 阅读 · 0 评论 -
力扣242 有效的字母异位词
public boolean isAnagram(String s, String t) { if(s.length()!=t.length()) return false; int[] sArray=new int[26]; for(int i=0;i<s.length();i++){ sArray[s.charAt(i)-'a']++; sArray[t.charAt(i)-'a']--; ...原创 2022-04-28 17:49:50 · 305 阅读 · 0 评论 -
力扣349 两个数组的交集
方法一:哈希表+遍历 public int[] intersection(int[] nums1, int[] nums2) { HashMap<Integer,Boolean> map=new HashMap<>(); List<Integer> res=new ArrayList<>(); for(int i=0;i<nums1.length;i++){ map.pu原创 2022-04-28 17:02:34 · 190 阅读 · 0 评论 -
力扣415 字符串相加
public String addStrings(String num1, String num2) { StringBuilder res=new StringBuilder(); int i=num1.length()-1; int j=num2.length()-1; int carry=0; while(i>=0||j>=0){ int n1=i>=0?num1.charAt(.原创 2022-04-11 21:42:40 · 241 阅读 · 0 评论 -
岛屿题目合集
力扣200 岛屿数量方法一:DFS方法二:BFS注意bfs方法出现过的问题:超时之前写的代码:这样写导致在bfs算法里将每个坐标都访问了一遍,造成时间过长,但其实grid[i][j]='0'的话就不需要再访问了,而grid[i][j]周围的'1'会经过其它'1'上下左右遍历到。修改后:力扣695 岛屿的最大面积...原创 2022-04-10 22:13:30 · 309 阅读 · 0 评论 -
力扣3 无重复字符的最长子串
方法一:滑动窗口参考:滑动窗口问题合集方法二:动态规划 public int lengthOfLongestSubstring(String s){ HashMap<Character,Integer> map=new HashMap<>(); int[] dp=new int[s.length()+1]; dp[0]=0; int maxLen=0; for(int i=1;i<原创 2022-04-08 16:29:25 · 200 阅读 · 0 评论 -
力扣179 最大数
思路:可以参考优先队列中Comparator写法总结假设(b+a)>(a+b),compareTo返回1,a直接放在最后一个位置上,不会往上走,说明这是大顶堆。public String largestNumber(int[] nums) { int len=nums.length; String[] array=new String[len]; for(int i=0;i<len;i++){ array[i]=S..原创 2022-04-05 14:07:24 · 299 阅读 · 0 评论