隰有扶苏丶
无论谁倒下,我依旧坚强
展开
-
LeetCode刷题第十七天(82. 删除排序链表中的重复元素 II)
文章目录题目描述遍历二、JAVA代码复杂度分析题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]遍历由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,因此我们只需要对链表进行一次遍历,就可转载 2021-08-16 09:29:13 · 97 阅读 · 0 评论 -
LeetCode刷题第十六天(162. 寻找峰值)
文章目录题目描述方法一:线性扫描算法思想JAVA代码复杂度分析方法二:递归二分查找算法思想JAVA代码复杂度分析题目描述峰值元素是指其值大于左右相邻值的元素。给你一个输入数组 numsnumsnums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[−1]=nums[n]=−∞nums[-1] = nums[n] = -∞nums[−1]=nums[n]=−∞ 。示例 1:输入:nums=[1,2,3,1]nums = [1转载 2021-08-15 09:16:28 · 119 阅读 · 0 评论 -
LeetCode刷题第十六天(153. 寻找旋转排序数组中的最小值)
文章目录题目算法思想JAVA代码复杂度题目已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]转载 2021-08-15 08:31:36 · 129 阅读 · 0 评论 -
LeetCode刷题第十三天(231. 2 的幂)
文章目录题目描述方法一 二进制表示算法思想JAVA代码复杂度分析方法二 二进制表示算法思想JAVA代码复杂度分析方法三 判断是否为最大 222 的幂的约数算法思想JAVA代码复杂度分析题目描述给你一个整数 nnn,请你判断该整数是否是 222 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 xxx 使得 n==2xn == 2^xn==2x ,则认为 nnn 是 222 的幂次方。示例 1:输入:n = 1输出:true解释:20 = 1示例 2:输入:n转载 2021-08-12 10:00:29 · 116 阅读 · 0 评论 -
LeetCode刷题第十二天(120. 三角形最小路径和)
文章目录题目描述方法一 动态规划算法思想JAVA代码复杂度分析方法二:动态规划 + 空间优化算法思想JAVA代码复杂度分析题目描述给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。示例 1:输入:triangle = [[2],[3,4],[6,5,7转载 2021-08-11 11:01:32 · 132 阅读 · 0 评论 -
LeetCode刷题第十二天(198. 打家劫舍)
文章目录题目算法(动态规划)JAVA代码复杂度分析题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 =转载 2021-08-11 09:58:16 · 74 阅读 · 0 评论 -
LeetCode刷题第十二天(70. 爬楼梯)
文章目录题目描述方法一:动态规划算法思想JAVA代码复杂度分析方法二:矩阵快速幂算法思想JAVA代码复杂度分析方法三:通项公式算法思想JAVA代码复杂度分析题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1转载 2021-08-11 09:34:44 · 88 阅读 · 0 评论 -
LeetCode刷题第十一天(784. 字母大小写全排列)
文章目录题目描述方法一:递归【通过】基本思想JAVA代码复杂度分析方法二:二分掩码【通过】基本思想JAVA代码复杂度分析题目描述给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例:输入:S = “a1b2”输出:[“a1b2”, “a1B2”, “A1b2”, “A1B2”]输入:S = “3z4”输出:[“3z4”, “3Z4”]输入:S = “12345”输出:[“12345”]方法一:递归【通过】基本思想思路转载 2021-08-10 10:53:44 · 116 阅读 · 0 评论 -
LeetCode刷题第十一天(46. 全排列)
文章目录题目算法思想(回溯法)JAVA代码复杂度分析题目给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]算法思想(回溯法)回溯法:一种通过探索所有可能的候选解来找转载 2021-08-10 10:05:44 · 224 阅读 · 0 评论 -
LeetCode刷题第十一天(77. 组合)
文章目录题目方法一 经典回溯法方法二:递归实现组合型枚举基本思想JAVA代码复杂度![在这里插入图片描述](https://img-blog.csdnimg.cn/b2f8e1d5105e49d0a8b4dafd20eb9c40.png)方法三:非递归(字典序法)实现组合型枚举基本思想JAVA代码复杂度题目给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[转载 2021-08-10 09:34:20 · 147 阅读 · 0 评论 -
LeetCode刷题第十天(206. 反转链表)
文章目录题目方法一:迭代算法思想JAVA代码复杂度分析方法二:递归算法思想JAVA代码复杂度分析题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]方法一:迭代算法思想假设链表为 1→2→3→∅1 ,我们想要把它改成 ∅←1←2←3。在遍历链表时,将当前节点的 next 指针改为转载 2021-08-09 11:20:56 · 70 阅读 · 0 评论 -
LeetCode刷题第十天(21. 合并两个有序链表)
文章目录题目方法一:迭代算法思想JAVA代码复杂度分析方法二:递归算法思想JAVA代码复杂度分析题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]方法一:迭代算法思想我们可以用迭代的方法来实现上述算法。当 l1转载 2021-08-09 10:52:30 · 50 阅读 · 0 评论 -
LeetCode刷题第九天(994. 腐烂的橘子)
文章目录题目描述广度深度优先解法JAVA代码算法复杂度题目描述在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。示例 1:输入:[[2,1,1],[1,1,0],[0,1,1]]输出:4示例 2:输入:[[2,1,1],[0,1,1],[1,0,1]]输出:-1解释转载 2021-08-08 10:13:13 · 217 阅读 · 0 评论 -
LeetCode刷题第九天(542. 01 矩阵)
文章目录题目描述方法一:广度优先搜索算法思想JAVA代码复杂度分析方法二:动态规划算法思想JAVA代码复杂度分析方法三:动态规划的常数优化算法思想JAVA代码复杂度分析题目描述给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:mat = [[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]示例 2:输入:转载 2021-08-08 09:56:10 · 281 阅读 · 0 评论 -
LeetCode刷题第八天(116. 填充每个节点的下一个右侧节点指针)
文章目录题目方法一 层次遍历算法思想JAVA代码复杂度分析方法二 使用已建立的 next 指针算法思想JAVA代码复杂度分析题目给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,.转载 2021-08-07 10:31:42 · 84 阅读 · 0 评论 -
LeetCode刷题第八天(合并二叉树)
文章目录题目描述方法一:深度优先搜索算法思想java代码算法复杂度方法二:广度优先搜索算法思想java代码算法复杂度题目描述给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例:输入: Tree 1 Tree 2转载 2021-08-07 09:37:10 · 90 阅读 · 0 评论 -
LeetCode刷题第七天(岛屿的最大面积)
文章目录算法思想方法一:深度优先搜索基本思想JAVA代码复杂度方法二:深度优先搜索 + 栈基本思想JAVA代码复杂度方法三:广度优先搜索基本思想JAVA代码复杂度算法思想给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例一:[[0,0,转载 2021-08-06 09:56:07 · 79 阅读 · 0 评论 -
LeetCode刷题第七天(图像渲染)
文章目录题目描述方法一:广度优先搜索算法思路JAVA代码算法复杂度方法二:深度优先搜索算法思想JAVA代码算法复杂度题目描述有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个转载 2021-08-06 09:06:58 · 181 阅读 · 1 评论 -
LeetCode刷题第六天(字符串的排列)
文章目录题目方法一:滑动窗口思想JAVA代码方法二:优化滑动窗口优化思想JAVA代码复杂度分析方法三:双指针算法思想JAVA代码复杂度分析题目给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,s1 的排列之一是 s2 的 子串 。示例一:输入:s1 = "ab" s2 = "eidbaooo"输出:true解释:s2 包含 s1 的排列之一 ("ba").示例二:输入:s1= "ab" s2 = "eidboaoo"输出:false方法转载 2021-08-05 09:44:28 · 138 阅读 · 0 评论 -
LeetCode刷题第六天(无重复字符的最长字串)
文章目录题目介绍滑动窗口算法思路JAVA代码复杂度分析题目介绍给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。示例一:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例二:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例三:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。原创 2021-08-05 09:04:34 · 101 阅读 · 0 评论 -
LeetCode刷题第五天(删除链表的倒数第 N 个结点)
文章目录题目描述前言方法一:计算链表长度算法思想JAVA代码算法复杂度方法二:栈算法思想JAVA代码算法复杂度方法三:双指针算法思想JAVA代码算法复杂度题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]输入:head = [1], n = 1输出:[]输入:head = [1,2], n = 1输出:[1]前言在对链表进行操作时,一种常原创 2021-08-04 09:01:00 · 79 阅读 · 0 评论 -
LeetCode刷题第五天(链表的中间节点)
文章目录题目描述方法一:数组法基本思想JAVA代码复杂度分析方法二:单指针法算法思想JAVA代码复杂度分析方法三: 快慢指针法基本思想JAVA代码复杂度分析题目描述给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例一:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,原创 2021-08-04 08:19:51 · 81 阅读 · 0 评论 -
LeetCode刷题第四天(反转字符串中的单词III)
文章目录题目描述解法基本思想JAVA代码算法复杂度题目描述给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例一:输入:"Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"解法基本思想开辟一个新字符串。然后从头到尾遍历原字符串,直到找到空格为止,此时找到了一个单词,并能得到单词的起止位置。随后,根据单词的起止位置,可以将该单词逆序放到新字符串当中。如此循环多次,直到遍历完原字符串,就原创 2021-08-03 11:08:28 · 102 阅读 · 0 评论 -
LeetCode刷题第四天(反转字符串)
文章目录题目描述方法一:双指针(正常交换)算法思路复杂度分析方法二:双指针(位运算)解法的不同之处java代码复杂度分析题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例一:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例二原创 2021-08-03 10:25:20 · 66 阅读 · 0 评论 -
LeetCode刷题第三天(两数之和II-输入有序数组)
文章目录题目描述方法一:二分查找思想JAVA代码复杂度分析方法二: 双指针原理JAVA代码复杂度分析题目描述给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而原创 2021-08-02 11:59:40 · 88 阅读 · 0 评论 -
LeetCode刷题第三天(移动零)
文章目录题目双指针解法思路JAVA代码复杂度分析题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。双指针解法思路使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。注意到以下性质:1.左转载 2021-08-02 11:01:54 · 56 阅读 · 0 评论 -
LeetCode刷题第三天(旋转数组)
文章目录题目描述方法一:使用额外的数组方法二:环状替换方法三:数组翻转题目描述给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例一:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2原创 2021-08-02 10:01:41 · 84 阅读 · 0 评论 -
LeetCode刷题第二天(有序数组的平方)
文章目录题目描述方法一:直接排序1 思路和算法2 JAVA代码3 复杂度方法二 双指针(一)1 算法思想2 JAVA代码3 复杂度分析方法三 双指针(二)1 算法思想2 JAVA代码3 复杂度题目描述给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例一:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,1原创 2021-08-01 12:17:20 · 121 阅读 · 0 评论 -
LeetCode刷题第二天(搜索插入位置)
LeetCode刷题第二天(搜索插入位置)文章目录LeetCode刷题第二天(搜索插入位置)题目描述解题思路JAVA代码复杂度2.读入数据总结题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例一:输入: nums = [1,3,5,6], target = 5输出: 2示例二:输入: nums = [1,3,5,6], target = 2输出: 1示原创 2021-08-01 11:52:05 · 221 阅读 · 0 评论 -
LeetCode刷题第二天(第一个错误的版本)
LeetCode刷题第二天题目你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示原创 2021-08-01 11:01:16 · 79 阅读 · 0 评论 -
LeetCode刷题第一天(二分查找)
查找算法LeetCode刷题第一天题目顺序查找(暴力破解)二分查找(非递归)插值查找斐波那契查找LeetCode刷题第一天题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums中的 target,如果目标值存在返回下标,否则返回 -1。示例一输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例二输入: nums = [-1,0,3,5,9,1原创 2021-07-31 12:42:06 · 114 阅读 · 0 评论