随笔分类 -  LeetCode

摘要:题目连接 92. 反转链表 II 题目分析 题目要求我们用一趟扫描完成旋转,我们只需要先把[m,n]这段区间内的链表定位了就容易做了。当我们完成定位后就是普通的三指针反转链表 代码实现 /** * Definition for singly-linked list. * public class L 阅读全文
posted @ 2020-10-04 18:12 ZJPang 阅读(100) 评论(0) 推荐(0)
摘要:题目链接 1525. 字符串的好分割数目 题目思路 使用两个数组,记录在第i个位置分割字符串的时候,其[0,i-1]之间出现字符串的种数和[i, s.length()-1]之间出现的字符串种数。然后再使用一次遍历去检查如果分割第i个位置,其左右的大小是否相等即可。 由于题目输入全部都是小写字符,所以 阅读全文
posted @ 2020-09-28 16:03 ZJPang 阅读(128) 评论(0) 推荐(0)
摘要:题目链接 117. 填充每个节点的下一个右侧节点指针 II 题目分析 这个题的普通版本其实比较好实现,利用层序遍历去保存当前层的所有节点然后再使用next指针重建链表即可。 但是有个进阶要求:使用常数级别的额外空间,这里就比较的难受了。 其实再看回题目,根节点这层的链表肯定只有一个节点,那么我们可以 阅读全文
posted @ 2020-09-28 09:34 ZJPang 阅读(114) 评论(0) 推荐(0)
摘要:题目链接 1529. 灯泡开关 IV 题目思路 这个题我的思路就是贪心,就嗯贪。 我们只需要用一个标志位来记录当前位置的灯泡开关情况,如果当前位置和目标位置不同的话,就反转一次,同时总记录+1. 那么我们这个反转就可以使用位运算,因为灯泡只存在0,1两种情况,我们翻转的时候只需要异或上1即可。 代码 阅读全文
posted @ 2020-09-21 19:24 ZJPang 阅读(113) 评论(0) 推荐(0)
摘要:题目链接 165. 比较版本号 题目思想 这个题没啥好说的,就是直接模拟即可,但是要注意Integer包装类的数值大小比较。另外就是字符串分割的时候,"."需要转义处理一下 代码实现 class Solution { //Integer不能直接比较大小,要么拆箱变成int,要么用equals来比较。 阅读全文
posted @ 2020-09-20 16:19 ZJPang 阅读(90) 评论(0) 推荐(0)
摘要:题目链接 312. 戳气球 题目分析 以两个数作为左右端点,找出最优解中它们中间那个戳破的气球,中间这个气球把整个队列分为了2部分,要想让中间这个气球和2个端点靠在一起,就需要先把分开的2部分的气球戳破。 dp[i][j]表示i~j最大值,i,j不戳破。 比如k气球在i,j之间时(i,k,j)被戳破 阅读全文
posted @ 2020-09-19 16:20 ZJPang 阅读(141) 评论(0) 推荐(0)
摘要:题目链接 605. 种花问题 题目分析 思路比较简单,直接写代码注释里了。 代码实现 class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int res = 0; //假想在数组中左右边界添加0,便于处理 阅读全文
posted @ 2020-09-18 19:16 ZJPang 阅读(105) 评论(0) 推荐(0)
摘要:题目链接 47. 全排列 II 题目分析 很明显的回溯问题了,与1的不同在于这个2存在重复的数字。那么我们需要考虑可靠的去重方案。 我们可以先对数组进行预排序,那么我们在回溯过程中,如果选择当前的数字之后,当前轮次的下一个选择的数字就应该是与当前数字不同的那一个,这样可以确保我们不会选出重复的方案。 阅读全文
posted @ 2020-09-18 10:35 ZJPang 阅读(113) 评论(0) 推荐(0)
摘要:题目链接 990. 等式方程的可满足性 题目分析 这个题目其实非常典型的并查集的内容了,我们首先先对等号的式子建立一个并查集。然后再使用一轮循环去判断不等号的情况,如果不等号的左右两个符号属于同一个集合,那么就说明这个式子有问题,返回false即可。否则就返回true。 代码实现 class Sol 阅读全文
posted @ 2020-09-17 11:20 ZJPang 阅读(130) 评论(0) 推荐(0)
摘要:题目链接 85. 最大矩形 题目分析 这个题和最大正方形有点类似,但是这个是个矩形,所以需要特殊手段来求,但是总体来说dp的思路是没问题的。 我们开一个三维数组dp[i][j][k], i代表第i行,j代表列,k代表两个方向上1的个数。 dp[i][j][0] 就是matrix[i][j]水平方向累 阅读全文
posted @ 2020-09-14 20:26 ZJPang 阅读(109) 评论(0) 推荐(0)
摘要:题目链接 4. 寻找两个正序数组的中位数 题目分析 过了那么久,终于敢把这个题写一写了,其实在半年前看算法视频已经学过一次了,但是当时怎么都理解不了,现在自己又重新理解了一下。 题目给了两个正序数组,要求我们求其复合在一起的数组的中位数。 如果题目不限定条件的话,我们直接归并排序取中间即可,但是做不 阅读全文
posted @ 2020-09-14 11:12 ZJPang 阅读(134) 评论(0) 推荐(0)
摘要:题目链接 688. “马”在棋盘上的概率 题目分析 这个题其实就是一个dfs类型的题目,我们从开始点出发,一直向8个方向出发,如果遇到越界的情况就直接返回0。 直到K为0,即把K步走完了,那就返回1,那么我们当前这一步取一个ans累加下一步能够到达K == 0 的概率。 最后返回ans / 8即可。 阅读全文
posted @ 2020-09-12 21:18 ZJPang 阅读(140) 评论(0) 推荐(0)
摘要:题目链接 134. 加油站 题目分析 这个题初看没啥思路,但是细看的话可以用贪心来解决问题。 具体的思路写在代码中了 代码实现 class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { int sum = 0; / 阅读全文
posted @ 2020-09-12 15:39 ZJPang 阅读(108) 评论(0) 推荐(0)
摘要:题目链接 454. 四数相加 II 题目分析 这个题最容易想的就是暴力法,O(n^4)的时间复杂度必定会T,所以不用想。 然后我们就可以利用缓存的思想,把A,B,C,D分成两个组,先对AB计算组合和,然后对CD计算组合和,检查AB中是否有其相反数,如果有的话就把AB中出现相反数次数加到res上。 代 阅读全文
posted @ 2020-09-05 12:20 ZJPang 阅读(92) 评论(0) 推荐(0)
摘要:题目链接 31. 下一个排列 题目分析 这个题我好像在算法课上听过,因此5个月前我用算法课上的想法实现了一次,但是时隔5个月,我却忘记了之前的思路,所以专门再写一篇记录文章。 这个题要求我们找比这个数大的最小元素,比如说1 4 2 3 1,那么比这个数更大的最小元素就是1 4 3 1 2 那么其实根 阅读全文
posted @ 2020-09-05 10:34 ZJPang 阅读(81) 评论(0) 推荐(0)
摘要:题目链接 1419. 数青蛙 题目思路 这个题一开始我也没啥思路,所以参考了评论区的大佬的解法,然后自己写了点自己的理解。 代码 class Solution { public int minNumberOfFrogs(String croakOfFrogs) { char[] str = croa 阅读全文
posted @ 2020-08-27 18:11 ZJPang 阅读(161) 评论(0) 推荐(0)
摘要:题目链接 332. 重新安排行程 思路分析 这个题很明显的是一个图论,题目在给定一个起点的前提下,让我们寻找一条路径 ,能够把当前图中所有的边都走一次,而且这个图还是个有向图。 那么本菜鸡只能想到最原始的方法 先根据输入数据建立邻接链表 对所有的邻接链表进行排序,因为我们需要按照字典序的顺序来访问边 阅读全文
posted @ 2020-08-27 10:41 ZJPang 阅读(117) 评论(0) 推荐(0)
摘要:题目链接 201. 数字范围按位与 题目分析 这个题最容易想到的就是暴力解,从m与到n,如果其中遇到0就直接退出循环。但是这样做最后几个测试用例biss。 然后就需要用到其他的方法了,这里引用其他大佬写的题解 代码实现 class Solution { public int rangeBitwise 阅读全文
posted @ 2020-08-23 09:51 ZJPang 阅读(128) 评论(0) 推荐(0)
摘要:题目链接 647. 回文子串 题目分析 这个题和那个最长回文子串一个道理,可以用中心扩展方法或者DP方法进行处理,这个题我优先使用了DP进行处理。 DP方法 由题目可知,我们每个字符都能成为一个单独的回文串,所以count初始值就应该为字符串的长度。 然后我们定义一个boolean的二维数组,其定义 阅读全文
posted @ 2020-08-19 09:20 ZJPang 阅读(100) 评论(0) 推荐(0)
摘要:题目链接 415. 字符串相加 题目分析 这个题是个简单题,但是代码的写法可以有很多种。最基本的就是双指针同步去进行各位相加,然后用新的循环把多出来的那个数的剩余部分计算完。 这样写的话代码会比较复杂,我们可以把这里合成一个循环,直到所有条件都不符合了才结束,这里所说的条件是以下三个 字符串1长度结 阅读全文
posted @ 2020-08-03 09:20 ZJPang 阅读(110) 评论(0) 推荐(0)