![](https://img-blog.csdnimg.cn/7a4743bcc87f4863a6567bad98342d5d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
文章平均质量分 57
算法练习
MikeVane-bb
为理想而拥抱现实
展开
-
剑指 Offer 30. 包含min函数的栈-Java
文章目录[剑指 Offer 30. 包含min函数的栈](https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/)题目概述:算法思路:函数设计:额外注意:复杂度分析:代码实现:剑指 Offer 30. 包含min函数的栈题目概述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例:MinStack minStac原创 2021-12-08 17:43:29 · 484 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列-Java
文章目录[剑指 Offer 09. 用两个栈实现队列](https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/)题目概述:算法思路:复杂度分析:代码实现:剑指 Offer 09. 用两个栈实现队列题目概述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操原创 2021-12-08 17:42:15 · 57 阅读 · 0 评论 -
617. 合并二叉树-Java
文章目录[617. 合并二叉树](https://leetcode-cn.com/problems/merge-two-binary-trees/)题目概述:算法思路:1. 深度优先搜索代码实现:复杂度分析:617. 合并二叉树题目概述:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入原创 2021-12-08 17:41:43 · 224 阅读 · 0 评论 -
695. 岛屿的最大面积-Java
文章目录[695. 岛屿的最大面积](https://leetcode-cn.com/problems/max-area-of-island/)题目概述:算法思路:1. 深度优先搜索代码实现:复杂度分析:2. 广度优先搜索代码实现:复杂度分析:695. 岛屿的最大面积题目概述:给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水原创 2021-12-06 14:21:42 · 151 阅读 · 0 评论 -
200. 岛屿数量-Java
文章目录[200. 岛屿数量](https://leetcode-cn.com/problems/number-of-islands/)题目概述:算法思路:1. 深度优先搜索代码实现:复杂度分析:2. 广度优先搜索分离行与列的方法:代码实现:复杂度分析:200. 岛屿数量题目概述:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。原创 2021-12-06 14:21:12 · 416 阅读 · 0 评论 -
733. 图像渲染-Java
文章目录[733. 图像渲染](https://leetcode-cn.com/problems/flood-fill/)题目概述:算法思路:1. 深度优先搜索代码实现:复杂度分析:2. 广度优先搜索代码实现:复杂度分析:733. 图像渲染题目概述:有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初原创 2021-12-06 14:20:34 · 133 阅读 · 0 评论 -
567. 字符串的排列
567. 字符串的排列题目概述:给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,s1 的排列之一是 s2 的 子串 。 示例 1:输入:s1 = "ab" s2 = "eidbaooo"输出:true解释:s2 包含 s1 的排列之一 ("ba").示例 2:输入:s1= "ab" s2 = "eidboaoo"输出:false 提示:1 <= s1.len原创 2021-12-05 14:02:54 · 79 阅读 · 0 评论 -
3. 无重复字符的最长子串-Java
3. 无重复字符的最长子串题目概述:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是&原创 2021-12-05 13:59:51 · 146 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点-Java
19. 删除链表的倒数第 N 个结点题目概述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗? 示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]算法思路1. 数组(空间换时间)先遍历结点,将所有的结点放到数组中原创 2021-12-05 13:59:05 · 192 阅读 · 0 评论 -
876. 链表的中间结点-Java
题目概述给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 an原创 2021-12-05 13:58:35 · 92 阅读 · 0 评论 -
557. 反转字符串中的单词 III-Java
文章目录[557. 反转字符串中的单词 III](https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/)题目概述:算法思路:1. 双指针算法补充:异或算法步骤代码实现:复杂度分析:557. 反转字符串中的单词 III题目概述:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例:输入:"Let's take LeetCode contest"输出:"s'teL ekat ed原创 2021-12-04 12:51:37 · 174 阅读 · 0 评论 -
344. 反转字符串-Java
文章目录[344. 反转字符串](https://leetcode-cn.com/problems/reverse-string/)题目概述算法思路:1. 栈(空间复杂度更高)代码实现:复杂度分析:2. 双指针代码实现:复杂度分析:344. 反转字符串题目概述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表原创 2021-12-04 12:51:05 · 587 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组-Java
文章目录[167. 两数之和 II - 输入有序数组](https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/)题目概述算法思路:1. 哈希表代码实现:复杂度分析:2. 双指针代码实现:复杂度分析:3. 双指针+二分查找代码实现:复杂度分析:167. 两数之和 II - 输入有序数组题目概述给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应原创 2021-12-04 12:50:27 · 652 阅读 · 0 评论 -
283. 移动零-Java
文章目录[283. 移动零](https://leetcode-cn.com/problems/move-zeroes/)题目描述算法思路:1. 双指针代码实现复杂度分析:283. 移动零题目描述给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:1.必须在原数组上操作,不能拷贝额外的数组。2.尽量减少操作次数。算法思路:1. 双指针设置两个指针,一个为快原创 2021-12-03 19:37:31 · 719 阅读 · 0 评论 -
189. 旋转数组-Java
文章目录[189. 旋转数组](https://leetcode-cn.com/problems/rotate-array/)题目概述算法思路:1.额外的数组代码实现:复杂度分析:2.翻转(最巧解)算法原理:代码实现:复杂度分析:189. 旋转数组题目概述给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗? 示例 1:输入:原创 2021-12-03 19:36:58 · 100 阅读 · 0 评论 -
977. 有序数组的平方-Java
977. 有序数组的平方题目概述给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]示例 2:输入:nums = [-7,-3,2,3,11]输出:[4,9,9,49,121] 提示:1 <=原创 2021-12-02 21:54:00 · 74 阅读 · 0 评论 -
35. 搜索插入位置-Java
35. 搜索插入位置题目概述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4原创 2021-12-02 21:53:37 · 160 阅读 · 0 评论 -
278. 第一个错误的版本-Java
278. 第一个错误的版本题目描述你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少原创 2021-12-02 21:52:04 · 51 阅读 · 0 评论 -
704. 二分查找-Java
704. 二分查找题目概述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], t原创 2021-12-02 21:51:19 · 302 阅读 · 0 评论 -
LeetCode-二叉树的前序中序后序遍历-Java
二叉树的遍历前序遍历前序遍历 : 对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。代码实现(144. 二叉树的前序遍历)递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(原创 2021-12-02 15:41:26 · 76 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)-Java
8. 字符串转换整数 (atoi)题目概述:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。原创 2021-12-01 21:28:09 · 104 阅读 · 0 评论 -
121.买卖股票的时机-Java
121. 买卖股票的最佳时机题目概述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票原创 2021-12-01 21:27:22 · 56 阅读 · 0 评论 -
88. 合并两个有序数组-Java
88. 合并两个有序数组题目概述给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。 示例原创 2021-12-01 21:24:40 · 146 阅读 · 0 评论 -
53. 最大子序和-Java
题目概述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [原创 2021-12-01 21:23:50 · 46 阅读 · 0 评论 -
125. 验证回文串-Java
125. 验证回文串题目概述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。 示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串 提示:1 <= s.le原创 2021-12-01 21:23:20 · 165 阅读 · 0 评论 -
26. 删除有序数组中的重复项-Java
26. 删除有序数组中的重复项题目概述给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [原创 2021-12-01 21:22:38 · 491 阅读 · 0 评论 -
242. 有效的字母异位词-Java
242. 有效的字母异位词题目概述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false 提示:1 <= s.length, t.length <= 5 * 104s 和 t 仅包原创 2021-12-01 21:21:37 · 158 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置-Java
题目概述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], targe原创 2021-11-29 22:14:30 · 159 阅读 · 1 评论