随笔分类 - leetcode题目
记录leetcode刷题做题笔记
摘要:题目: 思路: 【1】这道题的核心在于找到X的值或者距离X值之间差值最小的值,然后往两边进行扩散,差值最小的优先纳入。 代码展示: //时间3 ms 击败99.5% //内存43.8 MB 击败 79.45% class Solution { public List<Integer> findClo
阅读全文
摘要:题目: 思路: 【1】简单的二分 代码展示: //时间13 ms 击败 94.23% //内存38.1 MB 击败 73.26% /* The isBadVersion API is defined in the parent class VersionControl. boolean isBadV
阅读全文
摘要:题目: 思路: 【1】利用TreeMap解题 1)利用TreeMap来存储snap_id : val,然后再用一个Map来存储index : tree; 2)找index索引下的snap_id版本的值时,只需要找最大的小于等于snap_id版本的值,利用TreeMap.floorEntry(snap
阅读全文
摘要:题目: 思路: 【1】里面自带了个判断函数,所以只要把选中的值塞进去判断即可。 代码展示: //时间0 ms 击败 100% //内存38 MB 击败 78.84% /** * Forward declaration of guess API. * @param num your guess * @
阅读全文
摘要:题目: 思路: 【1】二分的方式进行查找 【2】Z 字形查找(这个是能说是符合该题的逻辑要求,因为如果小于15,那么必然不可能大于15下面的,所以会退到11,如果比11大则说明第一行 的都不符合,就会落到下一行,相当于每一次操作都会排除一行或者一列) 代码展示: 【1】二分的方式进行查找 //时间6
阅读全文
摘要:题目: 思路: 【0】依据题目可得两个条件 1)同一个字母的必须在一个片段内 2)将所有划分结果按顺序连接,得到的字符串仍然是 s (也就是位置顺序不能变) 【1】利用数量个数来进行贪心 【2】利用下标位置来进行贪心 代码展示: 【1】利用数量个数来进行贪心 //时间1 ms 击败 100% //内
阅读全文
摘要:题目: 思路: 【1】这道题不难,暴力破解也是可以的,但是双循环带来的开销无疑很大的。所以以空间换时间借助辅助空间,那么就要思考辅助空间怎么知道该字符已经被收录了,如数据结构中的contains函数,判断是否在数据结构里面。但是换个角度想想,每个字符其实都是有对应的ASCII码,也就是有表可看,那么
阅读全文
摘要:题目: 思路: 【1】既然说了是O(N),那么基本就是不能用排序了,又要O(N),那么明摆着是要循环,而由于这里可以存在重复数据,但是判断连续却又不一定用得上重复的,所以用哈希表去重,去重完,理想点就是从每个连续的开头进行遍历,那么怎么才算是开头呢,假设要从K值开始遍历,那么K-1不存在就是连续数据
阅读全文
摘要:题目: 思路: 【1】首先遍历是必不可少的,其次Map的辅助空间也是要用的,那么剩下的便是将字符串转成字符数组,然后排序,再转回字符串,用相同字符串作为key存于Map中,便可以是一组数据,然后遍历Map返回,时间复杂度为O(N*Nlog(N)) 【2】换一种思路,字符源于ASCLL码,本质上是有容
阅读全文
摘要:题目: 思路: 【1】递归分解模拟的方式 思考如何分解: 如 3[a]2[bc]3[a2[c]]2[abc]3[cd]efabc3[cd]xyz 其中每个[]都是可以拆分的如 3[a] + 2[bc] + 3[a2[c]] + 2[abc] + 3[cd] + efabc + 3[cd] +xyz
阅读全文
摘要:题目: 思路: 【1】深度搜索 代码展示: //时间0 ms 击败 100% //内存40.5 MB 击败 77.15% /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode
阅读全文
摘要:题目: 思路: 【1】置换的方式(由于0是需要移到后面,倒不如说是非零的要往前挪动,前面有多少个0就需要移动多少格,为了尽量少的动,那么明确的计算出位置只交换一次是最少的,全部非零的都移动完了,也就说明必须要先遍历一遍数组,统计0的个数,和顺便挪动非零的数值,做完了,会发现由于挪动过程中某些0会被覆
阅读全文
摘要:题目: 思路: 【1】利用统计的方式 【2】单指针的方式 【3】双指针的方式(该方式其实算是对单指针的合并) 代码展示: 【1】利用统计的方式 //时间0 ms 击败 100% //内存40.2 MB 击败 12.27% class Solution { public void sortColors
阅读全文
摘要:题目: 思路: 【1】常规的遍历都是要记得 代码展示: //时间0 ms 击败 100% //内存39.8 MB 击败 33.10% //递归的方式 /** * Definition for a binary tree node. * public class TreeNode { * int va
阅读全文
摘要:题目: 思路: 【1】利用数组下标映射的方式来做 【2】更简单的置换方式 代码展示: 【1】利用数组下标映射的方式来做 //时间1 ms 击败 97.45% //内存57.8 MB 击败 34.15% //时间复杂度:O(N),其中 N 是数组的长度。 //空间复杂度:O(1)。 class Sol
阅读全文
摘要:题目: 思路: 【1】前置尝试 【2】利用快慢指针检测环的方式(关键是要理解如何将输入的数组看作为链表) 将数组下标 n 和数 nums[n] 建立一个映射关系 f(n): 1)数组中没有重复的数以数组 [1,3,4,2]为例: 其映射关系 n->f(n)为: 0->1 , 1->3 , 2->4
阅读全文