随笔分类 - leetcode题目
记录leetcode刷题做题笔记
摘要:题目: 思路: 【1】常规的模拟方法(这种直接就超时了) 【2】回溯 + 字典树 【3】删除被匹配的单词 代码展示: 【1】常规的模拟方法(这种直接就超时了) class Solution { public List<String> findWords(char[][] board, String[
阅读全文
摘要:题目: 思路: 【1】其实可以借鉴 530. 二叉搜索树的最小绝对差(783. 二叉搜索树节点最小距离) 这篇的逻辑,因为二叉搜索树最大的特点就是中序遍历会形成一个升序的数组,所以不满足该升序的就必然不是二叉搜索树。 代码展示: //时间2 ms 击败 19.15% //内存42.9 MB 击败 1
阅读全文
摘要:题目: 思路: 【1】首先最小差值必然是最接近的两个数的绝对值,根据示例一的树来看,由于是二叉搜索树,所以中序遍历后必然是一个有序的数组如【1,2,3,4,6】。那么相邻的两个数就是最接近的,故只需要遍历这个数组,获取两数之间的差值的绝对值即可。 代码展示: 【1】借用辅助空间的方式(这种比较直观)
阅读全文
摘要:题目: 思路: 【1】回溯的方式,如图 代码展示: //时间0 ms击败100% //内存41.6 MB击败75.18% //时间复杂度:O(n×n!),其中 n 为序列的长度。 //空间复杂度:O(n),其中 n 为序列的长度。 //除答案数组以外,递归函数在递归过程中需要为每一层递归函数分配栈空
阅读全文
摘要:题目: 思路: 【1】思路:采用深度搜索,但首先还是要遍历一遍数组,将哪些下标与第一个字母对应的进行递归查找。【其次,重点在于边界值,数组的上下左右边界,字符的长度边界,还有深度遍历的话应该有一个类似动态规划的数据用于记录标志位,可以采用布尔值,但是布尔值是8bit的,改用int,4bit,更节约空
阅读全文
摘要:题目: 思路: 【1】逻辑如图:(由于最后的pre是会存在以前的链接指向的,这个是需要清除的) 代码展示: //时间0 ms 击败 100% //内存42.1 MB 击败 5.69% //时间复杂度:O(n),其中 n 是链表的长度。 //空间复杂度:O(1)。 /** * Definition f
阅读全文
摘要:题目: 思路: 【1】分段处理的思维,大致可以分为三个部分 pre ->【left,right】-> next ,pre代表已处理部分 , 【left,right】代表需要翻转的正在处理部分,next代表未处理的部分,如图 【1.1】步骤分解: 1)链表分区为已翻转部分+待翻转部分+未翻转部分 2)
阅读全文
摘要:题目: 思路: 【1】关键点:首先k是会存在大于链表个数count的情况的(因为如果是大于的情况就相当于是绕了圈后再偏移),基于此就必须先遍历一遍拿出count是多少,然后计算出正确的偏移值k1 = k%count;然后将链表分为两部分, 断开链接(形成了 【head,pre】 和 【cur,end
阅读全文
摘要:题目: 思路: 【1】剑指 Offer II 022. 链表中环的入口节点(142. 环形链表 II ) 【1.1】哈希表作为辅助空间的方式 【1.2】进阶的,不借助辅助空间,采用双指针的方式 双指针的原理: 当f与s在环内相遇时, s与f相对于入口起点的距离为c: f 总路程= a + xb +
阅读全文
摘要:题目: 思路: 【1】采用分段处理的方式(这种方式时间复杂度为O(N+K),其中N为链表长度,K为反转长度) 【2】采用分段处理+头插法的方式(一趟扫描完成反转) 代码展示: 【1】采用分段处理的方式 // 采用分段处理的方式 //时间0 ms 击败 100% //内存39.3 MB 击败 11.4
阅读全文
摘要:题目: 思路: 【1】模拟的方式 首先面对链表这个东西一般都是用指针辅助 如这种是分成两部分的 只需要生成 指向大元素的头节点指针 maxNode (因为是代表头指针的都是创建虚拟头节点) 指向小元素的头节点指针 minNode 指向大元素的当前节点指针 maxCur (因为是代表头指针的都是创建虚
阅读全文
摘要:题目: 思路: 【1】所谓图克隆本质上就是另外开辟一块内存复制出跟给出的数据一致的内容 【2】既然是处理图那么最常用的便就是 思路一:DFS (深度遍历) 思路二:BFS (广度遍历) 辅助以字典相助 代码展示: //深度搜索的方式 //时间23 ms 击败 99.95% //内存40.8 MB 击
阅读全文
摘要:题目: 思路: 【1】二分查找主要是需要理解上下坡的概念 代码展示: //时间0 ms 击败 100% //内存40 MB 击败 89.24% // 一次遍历获取最大值,即最大峰值 class Solution { public int findPeakElement(int[] nums) { i
阅读全文
摘要:题目: 思路: 【1】利用树遍历的思维,回溯倒推回来即可 代码展示: //时间1 ms 击败 47.29% //内存39.6 MB 击败 99.28% class Solution { //将号码字母对应关系存储进Map private HashMap<Character, char[]> map
阅读全文
摘要:题目: 思路: 【1】本质上都是需要用到两点组成一条直线的公式 y+k*x = b,其中k为斜率,x和y为横纵坐标,b为常量值。 代码展示: 【1】暴力模拟的方式: //时间7 ms 击败 99.36% //内存39.1 MB 击败 83.32% //时间复杂度:O(n^3)。 //空间复杂度:O(
阅读全文
摘要:题目: 思路: 【1】如果不能转成字符串来判断是不是回文字符串,那么就用除法和余数看能不能复原成原来的数字就可以了。 代码展示: //时间5 ms 击败 98.1% //内存41.7 MB 击败 30.83% class Solution { public boolean isPalindrome(
阅读全文
摘要:题目: 思路: 【1】首先明确对于图的处理不外乎是广度遍历和深度遍历(递归)两种,而且做多的话会发现,深度耗时更少。其次该题目点出了被海水围绕的就会被淹没,那么不会被淹没的就只有从边界触发的陆地。所以对于第一行,最后一行,第一列,最后一列都需要从这里面进行搜索,看有没有延伸,故需要定义三种状态(或者
阅读全文