力扣题目
文章平均质量分 64
力扣题目题解大全
。ming。
一个努力从菜鸟变为老鸟的小白
展开
-
关于DFS和BFS的思考
1,如果只需要我们找的结果是可不可行,或者只要求返回一个结果,那么用深度优先遍历会更加高效,因为它是一直往下走,不能走后进行回溯,只要有一种结果就返回的,所以自然就会更加高效一点点。而BFS必须对每一种可能行都要进行尝试,所以会浪费很多时间。2,如果是要求找最值问题,一般就采用BFS算法,因为它是进行所有可能性进行同步前进的,这样子的好处是谁先到目标位置,那么谁就是最值而DFS则需要将所有的结果进行跑一遍,代码不好写容易出错。1,感染类:BFS2,最短路径类:BFS3,岛屿个数类:BFS4,可达原创 2022-07-06 23:07:27 · 337 阅读 · 0 评论 -
剑指Offer31—40题(leetcode 剑指Offer第二版)
31,从上到下打印二叉树 III思路分析在上一个道题的基础上修改一个添加的方法。如果是偶数层就从尾部添加,反之就头部添加注意:是修改的temp的添加方式,而不是队列的代码实现首先先了解一下linkedList的添加结果顺序public class Test { public static void main(String[] args) { //add的加入顺序 1234 LinkedList<Integer> list = new Link原创 2022-05-12 11:24:13 · 107 阅读 · 0 评论 -
剑指Offer41—50题(leetcode 剑指Offer第二版)
41,数字序列中某一位的数字思路分析:代码实现:/** * @version v1.0 * @ProjectName: 数据结构 * @ClassName: Solution35 * @Description: 请描述该类的功能 * @Author: ming * @Date: 2022/5/3 16:36 */public class Solution35 { public int findNthDigit(int n) { //表示n所在位置的数的位数原创 2022-05-12 11:18:16 · 183 阅读 · 0 评论 -
剑指Offer31—40题(leetcode 剑指Offer第二版)
31,从上到下打印二叉树 III思路分析在上一个道题的基础上修改一个添加的方法。如果是偶数层就从尾部添加,反之就头部添加注意:是修改的temp的添加方式,而不是队列的代码实现首先先了解一下linkedList的添加结果顺序public class Test { public static void main(String[] args) { //add的加入顺序 1234 LinkedList<Integer> list = new Link原创 2022-05-02 08:45:42 · 171 阅读 · 0 评论 -
剑指Offer21—30题(leetcode 剑指Offer第二版)
21, 反转链表思路分析通过双指针进行修改指针的方向拿1->2举例说明创建一个next指针,指向head的下一个节点,也就是2的位置在创建一个新的为null的指针pre因为是反转,开头的第一个指针的next应该是null,所以,head.next = pre然后在让per移向head,head移向next之后一次调用代码实现public class Solution19 { public class ListNode { int val;原创 2022-04-17 18:41:30 · 357 阅读 · 0 评论 -
剑指Offer11—20题(leetcode 剑指Offer第二版)
11,机器人的运动范围思路分析这道题需要注意的是两个点,一个是n,m的范围,他们都是100及其以内的值。另外一个是他是从(0,0)开始的,然后以此向别的方法走。上面的两个条件就确定了他不需要进行每个点的遍历,只能从初始点开始找,且我们也确定了判断能否进入格子的算法。剩下的就很简单了,就是一个深度优先遍历,这个大家应该都会吧。代码实现/** * @version v1.0 * @ProjectName: 数据结构 * @ClassName: Solution9 * @Descriptio原创 2022-04-14 14:53:33 · 145 阅读 · 0 评论 -
剑指Offer1—10题(leetcode 剑指Offer第二版)
1,用两个栈实现队列import java.util.Stack;/** * @version v1.0 * @ProjectName: 数据结构 * @ClassName: CQueue * @Description: 请描述该类的功能 * @Author: ming * @Date: 2022/4/4 20:08 * 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若原创 2022-04-10 22:07:23 · 533 阅读 · 0 评论 -
力扣题目11 盛最多水的容器
题目思路分析这道题可以看作求长方形最大面积的问题,我的第一思路是我从第一和第二条边开始一个个试,但是显示的超时了,于是就想着用双指针搞出来。于是就有了一个问题,就是如何能确保我们遍历过的位置能找到长方形面积最大值。就是保证我们左边的边一定要比右边高。详细解释:因为我们两边的指针是逐渐往里靠的,所以肯定会有一条边先到最优解,这里假设是左指针先到,这个时候右指针是在右最优解的右边,假设右指针所在的边是大于左指针的边,那么面积就是由数组的下标所决定的,且最优解就不在右指针的左边了,违背了我们的结果原创 2022-04-03 21:53:12 · 92 阅读 · 0 评论 -
力扣题目10 正则表达式匹配
10,正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = "aa", p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa", p = "a*"输出:true解释:因为 '原创 2022-03-04 11:39:15 · 69 阅读 · 0 评论 -
力扣题目9 回文数
9,回文数给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。解题思路:这道题是比较简单的,只需要判断是否是回文数这一个知识点,所以只需要考虑如何去判断一个数原创 2022-03-03 10:20:23 · 306 阅读 · 0 评论 -
力扣题目8 字符串转换整数 (atoi)
8,字符串转换整数 (atoi)请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这原创 2022-03-02 10:47:09 · 120 阅读 · 0 评论 -
力扣题目7 整数反转
7,整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321这个题目的思路有两种,一个就是利用字符串的反转功能,一个是利用秦九韶算法。方式一:利用字符串反转public static int reverse2(int x原创 2022-03-01 10:37:10 · 128 阅读 · 0 评论 -
力扣题目6 Z字形变换
6,Z 字形变换将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:原创 2022-02-28 10:29:57 · 65 阅读 · 0 评论 -
力扣题目5 最长回文子串
5,最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"提示:1 <= s.length <= 1000s 仅由数字和英文字母组成思路分析这个题目中,说明了s的长度在1000以内,就说明可以使用暴力法进行解决。找的是回文子串,回文串大体上分为两种:一种是奇数次的,例如bab,他的特点是中点两边的字符相同。原创 2022-02-27 10:05:31 · 59 阅读 · 0 评论 -
力扣题目4 寻找两个正序数组的中位数
4,寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2原创 2022-02-23 16:09:18 · 53 阅读 · 0 评论 -
力扣题目3 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。思路分析:这个题我的思路是使用双指针去解决。因为不需要重复的数字,所以我们可以先让一个指针走,直到遇到相同字符的字母,这个时候我们停止操作,让另外一个指针开始移动,在移动的同时,需要去除他这个位置的字符,直到不重复位置。查重的思路判断重复的办法是创建一个map,key是字符,value是出现的次数,原创 2022-02-20 16:26:49 · 322 阅读 · 0 评论 -
力扣题1 两数相加
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。这个题相对是比较简单的,做法也是很多的。在这里我用两种方法进行计算:原创 2022-02-15 10:45:03 · 67 阅读 · 0 评论 -
力扣题目二 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。解析:这个题的思路就是我们最基本的加减法。他的每个数字都是反转排序的,也就是说2 -> 4 -> 3对应的数字是324, 5 -> 6 -> 4对应的是465,然后两数相加,最后得到807.我们会发现一个很巧妙的地方,就在于这个链表中存放的数字原创 2022-02-15 16:38:24 · 76 阅读 · 0 评论