
难度中等
xing_ran_ran
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 热题 HOT 100 - 48. 旋转图像
思路:先以对角线(左上<—>右下)为轴进行翻转,再对每行左右翻转即可参考官方解答方法三https://leetcode-cn.com/problems/rotate-image/solution/xuan-zhuan-tu-xiang-by-leetcode-solution-vu3m/class Solution { public void rotate(int[][] matrix) { int n = matrix.length;//行数 ..原创 2021-03-13 15:59:45 · 341 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 46. 全排列
思路:回溯(树形结构上的深度优先遍历)回溯算法的复杂度主要由递归树的节点个数决定,时间复杂度是指数级别的,本质上是一种遍历的算法!回溯算法是用一份状态变量遍历整个状态空间的方法,只需要在合适的状态做一个保存即可。这种遍历相对于广度优先是节约空间的。class Solution { public List<List<Integer>> permute(int[] nums) { //输入数组长度 int n = nums.len..原创 2021-03-11 21:12:32 · 349 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 39. 组合总和
思路:回溯对于这类寻找所有可行解的题,我们都可以尝试用「搜索回溯」的方法来解决。参考https://leetcode-cn.com/problems/combination-sum/solution/hui-su-suan-fa-jian-zhi-python-dai-ma-java-dai-m-2/class Solution { public List<List<Integer>> combinationSum(int[] candidates, i..原创 2021-03-11 19:57:29 · 337 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 34. 在排序数组中查找元素的第一个和最后一个位置
思路:二分查找1)查找目标元素在有序数组中出现的第一个位置;如果第一个位置都没有找到的话,说明目标元素在有序数组中并不存在。2)查找目标元素在数组中出现的最后一个位置;如果找到了最后一个位置,就将第一个位置和最后一个位置封装成一个数组返回。——时间复杂度: O(logn) ,其中 n 为数组的长度。二分查找的时间复杂度为 O(logn),一共会执行两次,因此总时间复杂度为 O(logn)。——空间复杂度:O(1) 。只需要常数空间存放若干变量。class Solution {..原创 2021-03-11 17:11:43 · 296 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 33. 搜索旋转排序数组
思路:原创 2021-03-11 15:49:01 · 153 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 31. 下一个排列
“下一个排列”的定义是:给定数字序列的字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。思路:——时间复杂度:O(N),其中 N 为给定序列的长度。我们至多只需要扫描两次序列,以及进行一次反转操作。——空间复杂度:O(1),只需要常数的空间存放若干变量。class Solution { public void nextPermutation(int[] nums) { int i = nums.length -..原创 2021-03-10 21:17:37 · 173 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 22. 括号生成
思路:回溯参考https://leetcode-cn.com/problems/generate-parentheses/solution/pei-yang-chou-xiang-si-wei-hui-su-jie-fa-7dwu/class Solution { public List<String> generateParenthesis(int n) { List<String> res = new ArrayList<Strin..原创 2021-03-10 20:42:05 · 196 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 19. 删除链表的倒数第 N 个结点
思路:双指针删除倒数第n个节点等价于从列表头开始数起的第(L-n+1)个节点,其中L是链表的长度先让快指针前进两步,同时移动快慢指针,直到快指针走过最后一个节点,此时慢指针指向倒数第n+1个节点;删去慢指针的后继即可。 时间复杂度:O(L),其中L是链表的长度。 空间复杂度:O(1)。 /** * Definition for singly-linked list. * public class ListNode { * ...原创 2021-03-10 19:27:15 · 169 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 17. 电话号码的字母组合
思路:回溯1)建立数字->字母的映射关系;2)定义递归函数(注:如果是纯字符串拼接,会生成很多临时对象,性能会略差,Java实现中是用StringBuilder做拼接的,经测试耗时0毫秒,如果是用String类型做拼接耗时是6毫秒)class Solution { public List<String> letterCombinations(String digits) { List<String> combinations...原创 2021-03-10 16:56:08 · 214 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 15. 三数之和
思路:排序+双指针问题就变成:在一个排序数组中找到所有的两数之和使得其和等于一个特殊值?可以通过双指针法在O(N)时间内解决这个问题。即两个指针分别指向数组的首尾,如果和小于目标值,头指针向后移,使得和增大;如果和大于目标值,尾指针向前移,使得和减小。——时间复杂度:O(N^2),其中 N 是数组nums 的长度。——空间复杂度:O(logN)。我们忽略存储答案的空间,额外的排序的空间复杂度为 O(logN)。然而我们修改了输入的数组 nums,在实际情况下不一定允许,因此也可以看成使用..原创 2021-03-10 11:15:59 · 197 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 11. 盛最多水的容器
思路:双指针在初始时,左右指针分别指向数组的左右两端;然后我们需要移动一个指针。移动哪一个呢?直觉告诉我们,应该移动对应数字较小的那个指针(即此时的左指针)。这是因为,由于容纳的水量是由 两个指针指向的数字中较小值 * 指针之间的距离 决定的。 时间复杂度:O(N),双指针总计最多遍历整个数组一次。 空间复杂度:O(1),只需要额外的常数级别的空间。 public class Solution { public int maxArea(int[] height) { ..原创 2021-03-10 10:33:56 · 175 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 5. 最长回文子串
子串:原始字符串的一个连续子集子序列:原始字符串的一个子集思路:动态规划回文串是天然具有状态转移性质的,这是因为一个回文去掉两头以后,剩下的部分依然是回文。回文的长度要严格大于2。如果一个子串两头的字符不相等,一定不是回文串。如果一个子串两头的字符相等,需要看去掉两头以后剩下部分的子串是否是回文。...原创 2021-03-10 10:03:48 · 257 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 3. 无重复字符的最长子串
思路:滑动窗口1)我们使用两个指针表示字符串中的某个子串(或窗口)的左右边界,其中左指针代表着上文中「枚举子串的起始位置」,而右指针即为上文中的「不包含重复字符的最长子串的结束位置」;2)在每一步的操作中,我们会将左指针向右移动一格,表示 我们开始枚举下一个字符作为起始位置,然后我们可以不断地向右移动右指针,但需要保证这两个指针对应的子串中没有重复的字符。在移动结束后,这个子串就对应着 以左指针开始的,不包含重复字符的最长子串。我们记录下这个子串的长度;3)在枚举结束后,我们找到的最长的..原创 2021-03-08 19:29:27 · 298 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 2. 两数相加
思路:——时间复杂度:O(max(m,n)),其中 m,n 为两个链表的长度。我们要遍历两个链表的全部位置,而处理每个位置只需要 O(1) 的时间。——空间复杂度:O(max(m,n))。答案链表的长度最多为较长链表的长度 +1。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ..原创 2021-03-08 17:15:20 · 278 阅读 · 0 评论 -
LeetCode 热题 HOT 100 - 94. 二叉树的中序遍历
思路1:递归定义 inorder(root) 表示当前遍历到 root 节点的答案,那么按照定义,我们只要递归调用 inorder(root.left) 来遍历 root 节点的左子树,然后将 root 节点的值加入答案,再递归调用inorder(root.right) 来遍历 root 节点的右子树即可,递归终止的条件为碰到空节点。——时间复杂度:O(N)——空间复杂度:O(N)/** * Definition for a binary tree node. * public c..原创 2021-03-03 22:23:13 · 237 阅读 · 1 评论