随笔分类 - leetcode题目
记录leetcode刷题做题笔记
摘要:题目: 思路: 【1】可以参考 剑指 Offer II 105. 岛屿的最大面积(695. 岛屿的最大面积) 这篇,本质上思路都是一样的 代码展示: 深度优先搜索: //时间2 ms 击败 100% //内存46.3 MB 击败 81.86% class Solution { public int
阅读全文
摘要:题目: 思路: 【1】动态规划 【2】贪心 + 二分查找 // 贪心的思路,使用结果数组来存储,相同子序列中的最小值 // 如【10,9,2,5,3,7,101,18】 // 本质10,9,2都是只有一个最长递增子序列 // 那么其实10 和 9就没什么用了,为什么呢, // 因为后面出现的数字与2
阅读全文
摘要:题目: 思路: 【0】虽说是按位与的结果,但是本质上是求这些数的二进制公共前缀的部分 值为:5 二进制为:101 值为:6 二进制为:110 值为:7 二进制为:111 值为:8 二进制为:1000 值为:9 二进制为:1001 值为:10 二进制为:1010 值为:11 二进制为:1011 值为:
阅读全文
摘要:题目: 思路: 【1】重点是位理念和溢出的问题 代码展示: //时间2 ms 击败 3.44% //内存39.8 MB 击败 77.56% public class Solution { // you need treat n as an unsigned value public int reve
阅读全文
摘要:题目: 思路: 【1】其实都是需要考虑超出最大长度的字符串长度的情况 代码展示: //时间1 ms 击败 99.81% //内存40.5 MB 击败 36.73% //将数据划分为三种情况进行处理 class Solution { public String addBinary(String a,
阅读全文
摘要:题目: 思路: 【1】思路很简单,从后往前倒推回去,因为是10进制所以只需要考虑进位即可,会出现旧数组不能容纳新数组的情况,如【9】->【1,0】这种,容量扩大了。 代码展示: //时间0 ms 击败 100% //内存40.2 MB 击败 6.67% class Solution { public
阅读全文
摘要:题目: 思路: 【1】利用hash表来检索 【2】滑动窗口的思路(缩小空间复杂度,因为k<n) 代码展示: //时间17 ms 击败 83.88% //内存54.5 MB 击败 40.85% //滑动窗口的思路 //时间复杂度:O(n),其中 n 是数组 nums 的长度。 //需要遍历数组一次,对
阅读全文
摘要:题目: 思路: 【1】这道题本质上和 205. 同构字符串 这题十分相似 区别在于一个是字符与字符互相映射,另一个是字符与字符串互相映射 而且思路都是可以借鉴的 代码展示: //时间1 ms 击败 56.94% //内存39.3 MB 击败 82.10% //时间复杂度:O(n+m),其中 n 为
阅读全文
摘要:题目: 思路: 【1】用指针去扫 intervals,最多可能有三个阶段: 1)不重叠的绿区间,在蓝区间的左边 2)有重叠的绿区间 3)不重叠的绿区间,在蓝区间的右边 代码展示: //时间1 ms 击败 95.56% //内存42.8 MB 击败 86.3% //时间复杂度:O(n),其中 n 是数
阅读全文
摘要:题目: 思路: 【1】正常遍历合并即可 代码展示: //时间6 ms 击败 42.95% //内存40.1 MB 击败 6.36% //时间复杂度:O(n),其中 n 为数组的长度。 //空间复杂度:O(1)。除了用于输出的空间外,额外使用的空间为常数。 //为了避免数据溢出导致问题故判断采用 te
阅读全文
摘要:题目: 思路: 【1】首先如果画图,那么根据图我们可知一般都是选取右边界值的地方射出可以引爆最多的气球,而对于数组里面的数最好是有序的,因为便于检索。当然在排序过程中我们习惯了用 两值相减的方式 即 O1-O2这种,但是这种对于INT数据的边界值会存在溢出的情况导致 正数-负数 本应该是正数的情况,
阅读全文
摘要:题目: 思路: 【1】相当于在层次遍历上进行了小修改(如果层数是按0开始的,即碰到奇数层,则将数据倒着放入数组即可) 代码展示: //时间0 ms 击败 100% //内存40.2 MB 击败 73.35% /** * Definition for a binary tree node. * pub
阅读全文
摘要:题目: 思路: 【1】这道题需要知道层次遍历这个理念,因为层次遍历就是把树的节点按照层级来输出,那么既然一层的数据都有了,对这一层进行平均数的统计也就简单了。 代码展示: //时间4 ms 击败 8.92% //内存43.4 MB 击败40.98% //基于层次遍历来进行变动 /** * Defin
阅读全文
摘要:题目: 思路: 【1】利用哈希的方式模拟, 【2】利用下标的方式进行比对 代码展示: 【1】利用哈希的方式模拟, //时间22 ms 击败 33.69% //内存40.4 MB 击败 82.61% //时间复杂度:O(n),其中 n 为字符串的长度。我们只需同时遍历一遍字符串 s 和 t 即可。 /
阅读全文
摘要:题目: 思路: 【1】本质上限制了小写字母,也就是说,出现的字符最多也就26个,所以如果magazine出现的字符能组成ransomNote字符串,那么必然就是不会出现该字符的使用为负的情况,如果负了,那么就是不可能。 代码展示: //时间1 ms 击败 99.22% //内存42.4 MB 击败
阅读全文
摘要:题目: 思路: 【1】首先是要先看懂题目,题目要求的是限制每一行的字符个数,然后在有限的空间内往里面塞集合里面的字符串。而且隐性条件就是两个字符串之间必须要有空格作为间隔,所以就会有 s1.len+1空格+s2.len+1空格+....+sn.len <= maxWidth,如 maxWidth =
阅读全文
摘要:题目: 思路: 【1】暴力破解 【2】动态规划 【3】KMP算法(待写) 代码展示: //时间4 ms 击败 2.42% //内存40 MB 击败 5.5% class Solution { public int strStr(String haystack, String needle) { in
阅读全文
摘要:题目: 思路: 【1】依靠辅助空间,将变更的状态记录到辅助空间则不会干扰到原本的数组 【2】增加变更状态,因为哪怕是状态变更了,也要确保能够识别变更之前的状态,不然记录的结果会不准确 代码展示: //时间0 ms 击败 100% //内存39.8 MB 击败 42.19% //时间复杂度:O(mn)
阅读全文
摘要:题目: 思路: 【1】这道题的难点在于要知道旋转的规律与如何避免重复处理的问题 其中xc和yc分别为数组的边界值 xc = 数组行数 - 1 (因为正常下标是从0开始的,而长度统计是比边界值+1的) yc = 数组列数 - 1 旋转90度 (x, y) -> (y, xc - x) 旋转180度 (
阅读全文
摘要:题目: 思路: 【1】模拟的方式(采用二维数组,模拟出数据的存放排列,再遍历合成) 【2】按照规律顺序的方式(根据规律逐个放置于新数组中) 代码展示: //时间80 ms 击败 5.4% //内存53.1 MB 击败 5.1% class Solution { public String conve
阅读全文