随笔分类 - LeetCode
摘要:题目链接 452. 用最少数量的箭引爆气球 题目分析 这个题其实有点像区间合并的题目,先对气球按照Xstart升序进行排序,然后计算所有气球可以整合成最少的区间数,返回即可。 但是这里这个题有一个坑,就是在自定义排序的时候,不能直接简单使用a-b作为返回条件,因为在最后一个测试用例中,两个数相减会导
阅读全文
摘要:题目链接 147. 对链表进行插入排序 思路分析 这个题,就是插入排序的链表版。做的时候要注意保存当前结点的下结点以及及时断开next指针即可。 代码实现 class Solution { public ListNode insertionSortList(ListNode head) { List
阅读全文
摘要:题目链接 406. 根据身高重建队列 题目思路 这个题给了我们一个二维数组,第二维的含义有两个: 第i个人的身高。 在队列中,第i个人前面有arr[i][1]个人的身高大于或等于自己。 那么这个有点像那个广告牌的做法。首先我们先将数组进行排序,排序规则如下: 如果两者身高相等,那就按照大于或等于自己
阅读全文
摘要:题目链接 897. 递增顺序查找树 easy 题目思路 这个题有点像二叉树变单链表,利用中序遍历去进行更改即可。 代码实现 class Solution { TreeNode head; TreeNode pre; public TreeNode increasingBST(TreeNode roo
阅读全文
摘要:题目链接 129. 求根到叶子节点数字之和 medium 题目分析 这个题要求我们做一个路径上的数字转化为整数,并且求和。那么路径上转化为数字的话我们可以用前序遍历即可,遇到叶子节点就往总和上面加上当前的路径数字。 求和的话有两种方式: 采用全局变量思想进行记录,辅助方法不需要返回值。 使用辅助方法
阅读全文
摘要:题目链接 845. 数组中的最长山脉 Medium 题目分析 这个题的难度纯粹就是吓唬人的。。这个题的思路有很多,可以先找山峰,然后再向左右扩展。我的想法就是在遍历过程中去维护一个双指针,双指针的距离就是当前山脉的长度。 遍历过程中分以下几种情况 如果A[i] > A[i-1],那么这里可以看做山脉
阅读全文
摘要:题目链接 763. 划分字母区间 题目分析 这个题的话,第一眼看还没啥思路,忘了10+分钟才有点想法。。 题目总体的话就类似我们维护一个窗口,不断去拓展这个窗口的右边界,直到当前窗口内的所有字符最后一次出现的位置都在右边界内。 但是在维护的时候要注意下面几个点 如果第一次寻找右边界的时候,字符在串中
阅读全文
摘要:题目链接 925. 长按键入 Easy 题目思路 这个也是个双串匹配的问题,但是是属于较简单的匹配问题。 给定两个字符串,问这两个字符串是否代表同一个内容。 输入typed字符串中可能存在重复输入的键,这个时候我们可以忽略它。 那么我们用双指针去判断即可,其中i代表第一个字符串的浮标,j代表第二个字
阅读全文
摘要:题目链接 575. 分糖果 思路分析 这个题因为要求女方的糖果获得的种类最多,那么我们可以采用贪心的思想去解题。 因为题目加了另外一个限制条件:我们要对这堆糖果进行均分的策略。那么我们可以先去统计这堆糖果的种类有多少(因为要求女方种类最多)。 但是由于引入均分策略,所以我们可能会出现一个情况: ·
阅读全文
摘要:题目链接 863. 二叉树中所有距离为 K 的结点 题目思想 一开始把这个题当做树的类型来做,结果是毫无思路。只好将树转成图,然后再从target出发,dfs寻找距离等于k的点。 因为树中的数值不是固定的,我们使用HashMap来存放邻接链表(为了省空间)。 利用一个方法,通过前序遍历的思路建立图,
阅读全文
摘要:题目连接 116. 填充每个节点的下一个右侧节点指针 题目思路 这个题要求我们以常数级别的空间完成对树中next指针的连接。这个题最容易的思路就是使用中序遍历,在遍历过程中把指针连接上。但是这个题不可以使用额外的空间。 于是我们可以想到另外一个方法,我们在当前层次把下一层次的next指针安排上,因为
阅读全文
摘要:题目链接 1002. 查找常用字符 题目思路 这个题好像也没啥特别的思路,我个人就是使用一个二维数组去存放每个字符串中字符的出现次数(因为题目说只含有小写字母,所以可以直接使用数组),然后再使用一个二重循环,外层遍历小写字母,内层遍历字符串数组长度,去寻找每个字符出现的最少次数,然后再把它加入到结果
阅读全文
摘要:题目链接 523. 连续的子数组和 思路分析 这个题我第一次做的时候只会暴力查,外层循环i遍历整个数组,内层循环遍历[i, nums.length - 1],内层循环计算当前连续数组的和,如果遇到sum == k或者k != 0 && sum % k == 0的情况,就返回true。当外层循环也遍历
阅读全文
摘要:题目链接 973. 最接近原点的 K 个点 题目分析 看着这个TopK的题目,除了快排选择和堆排序外就没想别的东西。我这里直接就把堆排序的做法写出来了。我们维护一个以距离平方为评判标准的最大堆,如果堆的大小大于K,就把堆顶元素移除即可。 代码实现 class Solution { public in
阅读全文
摘要:题目链接 75. 颜色分类 题目思路 如果按照平常做法的话这个题的确非常的容易,我们先对数组中的数进行计数,然后再按个插入即可。 但是进阶要求我们使用一趟扫描并且还是常数空间的做法。 那么我们其实可以在第一次扫描数组的时候就把它放置到相应的位置了。因为数组只有0,1,2三种数字,我们其实只需要留意三
阅读全文
摘要:题目链接 154. 寻找旋转排序数组中的最小值 II 实现思路 在LeetCode 153. 寻找旋转排序数组中的最小值的思路上,进行重复元素、即nums[mid] == nums[right]的处理即可,我们在这种情况下只需要让right指针做一个偏移即可。 代码实现 class Solution
阅读全文
摘要:题目连接 153. 寻找旋转排序数组中的最小值 实现思路 因为数组被分成了两部分,我们每次拿到nums[mid]的值之后都应该和nums[right]进行比较 如果nums[mid] <= nums[right]的话,说明我们[mid, right]是有序的,那么我们nums[mid]有可能是最小值
阅读全文
摘要:题目连接 81. 搜索旋转排序数组 II 题目思路 参考LeetCode 33的思想 代码实现 class Solution { public boolean search(int[] nums, int target) { int left = 0; int right = nums.length
阅读全文
摘要:题目链接 33. 搜索旋转排序数组 题目思路 这个题比较容易的思路就是先寻找出数组分隔点,然后再通过target的大小进行二次二分查找。 但是其实我们可以把这两个步骤合二为一,但是要注意的坑比较多。 我们照常进行二分查找,如果nums[mid] == target,那就直接返回mid即可。 否则分以
阅读全文
摘要:题目连接 82. 删除排序链表中的重复元素 II 题目思路 这个题要求我们把所有重复出现的元素都删除,与前面的题目不一样的是这里不要求保留其中一个。 在看示例的时候发现如果连续出现两个重复元素的话,正常的双指针会出现重复元素。 那么我们要进行判断 当前位置是重复元素 当前位置元素只出现一次 对于第二
阅读全文