
LeetCode
文章平均质量分 59
码匀
时光在记忆里生根发芽
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 93、复原IP地址
题目:有效ip地址由四位整数组成,整数之间用.进行分割。现给定一个只包含数字的字符串s,表示一个ip地址,要求返回所有可能的IP地址。输入:s = "25525511135"输出:["255.255.11.135","255.255.111.35"]解题思路如果第一次做此类题目,可能会有点懵,我建议你可以先做一下 131和132的分割回文串,或者先看我上一篇文章。本题和分割回文串还是很相似的,分割回文串是对字符串进行分割,分割过程中没有限定分割次数,每次判断分割的字符串是否为回文即可。而本题也是对原创 2022-04-26 11:59:30 · 181 阅读 · 0 评论 -
LeetCode 131-132 分割回文串
题目:给定一个字符串s,要求将s分割成一些子串,使得每个子串都是回文串。返回所有可能的分割方案。返回符合要求的最少分割次数。解题思路首先看第一个问题,将字符串进行分割,并且判断子串是否是回文串,将最终分割全为回文串的结果进行返回。判断回文串的方法比较简单,我们可以使用双指针法进行判断,如下:public boolean isPalindrome(String s){ if(s == null) return false; for(int i=0,j=s.length()-1.原创 2022-04-25 19:39:41 · 606 阅读 · 0 评论 -
LeetCode 287.寻找重复的数
题目:给定一个数组nums,数组中只有一个数字重复,且重复次数未知,要求找到这个重复的数。要求不能修改原数组且只能使用常量级别的额外空间,时间复杂度为O(1)O(1)O(1)。解题思路如果没有那些限制条件,本题应该会降为简单题。我们来一个个解决条件。无条件无条件可以直接对数组进行排序,之后遍历数组查看当前元素和下一个元素是否相等即可,代码如下:// 排序 之后 循环public int findDuplicate(int[] nums) { Arrays.sort(nums);原创 2022-04-20 00:24:33 · 209 阅读 · 0 评论 -
LeetCode 283.移动零
题目:给定一个数组nums,要求将数组中的所有0移动到数组的最后,并且要求保持数组中所有非0元素的相对顺序。此处不允许复制数组,也就是要求空间复杂度为O(1)O(1)O(1)。解题思路本题虽然说是个简单题,但要求的逻辑能力还是不低的。首先我们可以使用索引定位法,题目要求我们将数组中的零元素全部移动到最后,那么我们在遍历数组的过程中忽略零元素,每次遍历将非零元素的位置确定,最后对数组尾部元素赋值为0即可。具体来说,我们使用一个变量来记录当前已确定的数组尾部索引,当数组每次遍历发现元素非零时,将该元素赋原创 2022-04-19 19:57:50 · 138 阅读 · 0 评论 -
LeetCode 240.搜索二维矩阵II
题目:现有一个二维矩阵,二维矩阵中每行的元素从左到右升序排列,每列的元素从上到下升序排列。现要求编写一个高效的算法来搜索二维矩阵中的目标值。解题思路可以使用暴力搜索法,如下:public boolean searchMatrix(int[][] matrix, int target) { for(int i=0;i<matrix.length;i++){ for(int j=0;j<matrix[0].length;j++){ if(matr原创 2022-04-19 19:56:47 · 160 阅读 · 0 评论 -
LeetCode 239.滑动窗口最大值
题目:给定一个整数数组nums和一个大小为k的滑动窗口,要求将窗口从数组的最左侧移到最右侧,返回每个滑动窗口中的最大值。解题思路本题很有意思,乍一看感觉好像很简单,人工模拟很快就能出答案,但实际上代码没有这么简单。滑动窗口,有点类似于队列,每次滑动无非就是从队列的左边出一个元素,从队列的右边进一个元素,那么如何判断队列中的最大元素则是一个关键的问题。在Java中,我们知道使用优先级队列可以得到一个集合输入元素的最大值或者最小值,因为优先级队列的底层是大根堆或者小根堆,每次输入元素都是堆的构建过程,而此原创 2022-04-19 19:55:51 · 298 阅读 · 0 评论 -
LeetCode 279.完全平方数
题目:给定一个整数,返回和是这个整数的完全平方数的最少数量。完全平方数是指:当一个数等于另一个数的平方时,这个数就是完全平方数,例如1、4、9、16、25等等都是完全平方数。例如:输入n=12,则因为4=2*2,而12=4+4+4,因此输出为3。解题思路额,没有思路。。。解答一下官方题解的思路吧。首先如果给定的整数其本身就是完全平方数,那直接返回1了。如果不是的话,例如12,我们知道在12之前的完全平方数有1、4、9,可系统可不知道,我们怎么得到这个结果?其实很简单,因为(12)\sqrt(12)原创 2022-04-19 19:55:16 · 193 阅读 · 0 评论 -
LeetCode 236.二叉树的最近公共祖先
题目:给定一颗二叉树,要求找到该树种两个指定的结点的最近公共祖先。解题思路求结点的祖先结点,那么结点必然需要一层层向上遍历,但结点的指针只有左孩子和右孩子,也就无法向上遍历。因此我们需要用一种数据结构存储每个结点的直接父亲结点,这样遍历到当前结点则可以直接获取其父亲结点。这种数据结构我采用Map,我们可以对二叉树做一次遍历,无论哪种,只需要保证可以遍历完整颗二叉树即可,每遍历一个结点,我们将当前结点作为key,其直接父亲结点作为value。当遍历完整颗二叉树的时候就可以得到每个节点对应其父亲结点的集合原创 2022-04-19 19:54:12 · 399 阅读 · 0 评论 -
LeetCode 238.除自身之外数组的乘积
题目:给定一个数组,要求返回另一个数组,另一个数组中元素等于除给定数组索引值的其余元素的乘积。要求:不能使用除法且时间复杂度控制在O(n)O(n)O(n)。解题思路最直接的想法:将数组遍历一次,得到数组中所有元素的乘积。之后再次遍历数组,每遍历到一个数,将所有元素乘积除以此数即可。时间复杂度满足O(n)O(n)O(n)。这个思路虽然直观,但当数组中数组存在0的时候则不满足,因此需要将0作为特殊情况计算。但题目要求不能用除法。那我们换个思路,最终得到的元素的结果是除自身之外其余元素的乘积,如果用两层f原创 2022-04-19 19:53:09 · 125 阅读 · 0 评论 -
LeetCode 234.回文链表
题目:给定一个单链表的头节点,要求判断该链表是否为回文链表。如果是的话就返回true,否则返回false。解题思路回文我们之前已经见过很多次了,例如字符串abba以及chjjhc等等,通俗来说就是正着读反着读都一样的就是回文。那么我们复习一下判断一个字符串是不是回文字符串:一个简单的思路就是我们可以同时从字符串的首元素和尾元素进行从前往后和从后往前的遍历,每次遍历都检查元素是否相同,当遇到不相同的就直接返回false,否则就是true。另一种思路就是依靠栈来存储字符,具体来说首先遍历字符串,依次将原创 2022-04-19 19:52:03 · 266 阅读 · 0 评论 -
LeetCode 226.翻转二叉树
题目:给定一颗二叉树,要求将这颗二叉树翻转并返回根节点。解题思路实际上就是将二叉树转为对称二叉树的另一面,和LeetCode101的对称二叉树有点像。我们可以想象一下:当树只有一个根节点的时候,此时不需要翻转。当树有三个结点的时候,此时只需要将左子树结点和右子树结点互换即可。当树结点大于三个的时候,此时应该?第三种情况就是解决本题的重点,此时我们只要想到了交换左右子树,那么答案也就很明显了。当一棵树超过三个结点,我们可以直接交换左右子树,之后通过递归再完成子树内部的交换即可,代码如下:p原创 2022-04-19 19:51:23 · 255 阅读 · 1 评论 -
LeetCode 215.数组中的第K个最大元素
题目:给定一个整数数组nums和一个整数k,要求返回数组中第k个大的元素。例如:输入[3, 2, 1, 5, 6, 4],k=2则输出为5。解题思路只求AC笔试必挂的解题思路:public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length-k]; }哈哈~ 实际上本题考查的是对排序的理解。下面介绍一下几种排序:插入排序插入排序的思想是:在原创 2022-04-19 19:50:34 · 233 阅读 · 0 评论 -
【LeetCode】5. 最长回文子串
题目描述:给你一个字符串 s,找到 s 中最长的回文子串。示例:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。朴素解想把本题做出来不难,难的是如何优化,对本题的最朴素的想法就是:对于给定的字符串,首先找出所有的回文字串,然后将这些回文字串想办法反过来,比较前后回文字串是否相等,如果是回文子串,那么则记录长度并且更新最长回文子串,最后返回即可,看代码:public String longestPalindrome(String s) { i原创 2021-09-26 09:29:44 · 98 阅读 · 0 评论 -
【LeetCode】3. 无重复字符的最长子串
题目描述:给定一个字符串s ,请你找出其中不含有重复字符的最长子串的长度。示例:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。朴素解一眼看完本题,我就又想到了优美的HashMap,因为map里面存的是键和值,这也就意味着键不可重复,如果添加相同的键进入map,则会将之前的值覆盖,而对于一个字符串,我们可以从左到右遍历此字符串,并且设置两个索引start和end,分别指向子串的开始和结束,那么对于字串的长度即等于end-star原创 2021-09-24 18:05:07 · 150 阅读 · 0 评论 -
【LeetCode】2. 两数相加
题目描述:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.首先科普一下逆序存储(我也是百度的,哈哈哈哈),看图:都懂啥意思了吧,不懂百度去,此时打印链表数据输出的就是(3、2、1)。朴素解原创 2021-09-24 15:23:48 · 118 阅读 · 0 评论 -
【LeetCode】1. 两数之和
题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。示例:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。朴素解刚拿到此题目的时候,我的第一反应就是遍历,只要将我们的nums一个一个地遍历,通过计算每个索引对应的值的相加等于traget,最后返回两个索引值即可,如图:对于nu原创 2021-09-24 10:33:52 · 103 阅读 · 0 评论