Leetcode
文章平均质量分 50
梦晨涌京
一枚平平无奇的在校研究生
展开
-
Leetcode︱20.Valid Parentheses有效的括号.java
题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 :输入: s = “([)]”输出: false标签栈解题思路方法:栈我们遍历给定的字符串 ss。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶。当我们遇到一个右括号时,我们需要将一个相同类型原创 2021-04-22 21:42:01 · 102 阅读 · 0 评论 -
Leetcode︱461. Hamming Distance汉明距离.java
题目两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 2^31.示例 :输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0)标签栈;移位解题思路方法一:栈将二进制数输入到栈中,然后再逐位比较统计。要特别注意,在pop的过程中,size会变化,所以要提前记录好原size长度。方法二:移位按位进行与操作,将其移位后,再进行比较。原创 2021-04-11 11:10:19 · 85 阅读 · 0 评论 -
Leetcode︱448. Find All Numbers Disappeared in an Array找到所有数组中消失的数字.java
题目给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例 :输入:[4,3,2,7,8,2,3,1]输出:[5,6]标签数组;哈希解题思路方法一:哈希先将数组中出现的数字保存到哈希表中,第二次遍历时,将未在其中的数返回。方法二:技巧解原创 2021-04-11 07:59:43 · 74 阅读 · 0 评论 -
Leetcode︱543.Diameter of Binary Tree二叉树的直径.java
题目给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 : 1 / \ 2 3 / \4 5返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意: 两结点之间的路径长度是以它们之间边的数目表示。标签二叉树;DFS解题思路方法:深度优先搜索先计算每个节点的左右子树的深度,得出以该节点为核心的直径,经过遍历后得到最长的直径。源自:原创 2021-03-31 13:05:50 · 54 阅读 · 0 评论 -
Leetcode︱70. Climbing Stairs爬楼梯.java
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意: 给定 n 是一个正整数。示例 :输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶标签数组;动态规划解题思路方法:动态规划第n个台阶只能从第n-1或者n-2个上来。到第n-1个台阶的走法 + 第n-2个台阶的走法 = 到第n个台阶的走法,已经知道了第1个和第2个台阶的走法,一路原创 2021-03-29 10:45:10 · 94 阅读 · 0 评论 -
Leetcode︱121. Best Time to Buy and Sell Stock买卖股票的最佳时机.java
题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 :输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7原创 2021-03-24 10:28:51 · 60 阅读 · 0 评论 -
Leetcode︱5.Longest Palindromic Substring最长回文子串.java
题目给你一个字符串 s,找到 s 中最长的回文子串。示例 :输入: s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成标签字符串;动态规划解题思路方法:动态规划对于一个子串而言,如果它是回文串,并且长度大于 2,那么将它首尾的两个字母去除之后,它仍然是个回文串。例如对于字符串“ababa”,如果我们已经知道“bab” 是回文串,那么“ababa原创 2021-03-22 08:58:10 · 59 阅读 · 0 评论 -
Leetcode︱4.Median of Two Sorted Arrays寻找两个正序数组的中位数.java
题目给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 :输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2说明:nums1.length == mnums2.length == n0 <= m <= 10000 <= n <= 10001 <= m + n <= 2000-106 <原创 2021-03-01 21:53:17 · 85 阅读 · 1 评论 -
Leetcode︱3.Longest Substring Without Repeating Characters无重复字符的最长子串.java
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 :输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。提示:0 <= s.length <= 5 * 10^4s 由英文字母、数字、符号和空格组成标签字符串;哈希解题思路方法:滑动窗口使用两个指针表示字符串中的某个子串(或窗口)的左右边界。源自:https://leetcode-cn.com/problems/longest-s原创 2021-02-28 17:53:03 · 72 阅读 · 0 评论 -
Leetcode︱2.Add Two Numbers两数相加.java
题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 :输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.提示:• 每个链表中的节点数在范围 [1, 100] 内• 0 <= Node.val <= 9• 题目数据保证列表表示原创 2021-02-28 17:46:54 · 62 阅读 · 0 评论 -
Leetcode︱19.Remove Nth Node From End of List删除链表的倒数第N个节点.java
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例 :给定一个链表: 1->2->3->4->5, 和 *n* = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。标签链表;哑节点;栈解题思路方法一:普通遍历在对链表进行操作时,先统计它的节点个数,再将指针指向待删除的前一个节点,然后进行删除。但同时,我们还需要对头节点进行特殊的判断了。方法二:哑节点在对链表进行操作时原创 2021-01-03 11:53:55 · 76 阅读 · 0 评论 -
Leetcode|237.Delete Node in a Linked List删除链表中的节点.java
题目请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 :输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释:给定你链表中值为 1 的第三个节原创 2021-01-01 19:32:00 · 60 阅读 · 0 评论 -
Leetcode|14.Longest Common Prefix最长公共前缀.java
题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 :输入: [“flower”,“flow”,“flight”]输出: “fl”输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。标签字符串;递归解题思路方法一:横向扫描依次遍历字符串数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀,当遍历完所有的字符串以后,即可得到字符串数组中的最长公原创 2020-12-27 16:00:26 · 101 阅读 · 0 评论 -
Leetcode|38.Count and Say外观数列.java
题目给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:\1. 1\2. 11\3. 21\4. 1211\5. 111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个原创 2020-12-24 13:13:11 · 77 阅读 · 0 评论 -
Leetcode|28.Implement strStr()实现 strStr().java
题目实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 :输入: haystack = “hello”, needle = “ll”输出: 2输入: haystack = “aaaaa”, needle = “bba”输出: -1说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本原创 2020-12-23 09:53:47 · 63 阅读 · 0 评论 -
Leetcode|8.String to Integer (atoi)字符串转换整数.java
题目请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个原创 2020-12-22 16:10:11 · 80 阅读 · 0 评论 -
Leetcode|125.Valid Palindrome验证回文串.java
题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。示例 :输入: “A man, a plan, a canal: Panama”输出: true输入: “race a car”输出: false说明: 本题中,我们将空字符串定义为有效的回文串。标签字符串;双指针;正则表达式解题思路方法一:双指针在首尾分别设定一个指针,用于指向字母/数字等符合条件的字符,将大写字母变为小写字母以便于比较。方法二:正则表达式使用正则表达式对原字符串进行处理,留原创 2020-12-21 14:14:02 · 84 阅读 · 0 评论 -
Leetcode|242.Valid Anagram有效的字母异位词.java
题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 :输入: s = “anagram”, t = “nagaram”输出: true输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。标签字符串;排序;哈希表;字符数组解题思路方法一:排序比较将字符串转换为字符数组后,进行排序,然后按位比较大小。方法二:哈希表1)进行两次遍历,第一次统计每个字符出现的次数,第二次进行比较两个map具体出原创 2020-12-21 08:20:18 · 62 阅读 · 0 评论 -
Leetcode|387. First Unique Character in a String字符串中的第一个唯一字符.java
题目给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例 :s = “leetcode”返回 0s = “loveleetcode”返回 2提示: 你可以假定该字符串只包含小写字母。标签字符串;哈希表解题思路方法:哈希表先将每个字符出现的次数统计到哈希映射中,再进行第二次遍历,找出只出现一次的字符,返回其索引即可。代码public class Leetcode387_FirstUniqueCharacterIn_a_String {原创 2020-12-18 10:41:41 · 57 阅读 · 0 评论 -
Leetcode|7.Reverse Integer整数翻转.java
题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21标签数组;数值边界解题思路弹出和推入数字 & 溢出前进行检查要在没有辅助堆栈 / 数组的帮助下 “弹出” 和原创 2020-12-16 16:38:09 · 58 阅读 · 0 评论 -
Leetcode|344.Reverse String反转字符串.java
题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 :输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]标签字符数组;字符串;双指针解题思路双指针字符串反转,便是将第一个跟最后一个字符交换位置,第二个跟倒数第二个交换,依次类推…原创 2020-12-16 16:34:29 · 63 阅读 · 0 评论 -
Leetcode|48.Rotate Image旋转图像.java
题目给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],[原创 2020-12-15 21:08:52 · 128 阅读 · 0 评论 -
Leetcode|36.Valid Sudoku有效数独.java
题目判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 '.' 表示。示例1 :输入:[[“5”,“3”,".",".",“7”,".",".",".","."],[“6”,".",".",“1”,“9”,“5”,".",".","."],["原创 2020-12-14 22:33:59 · 96 阅读 · 0 评论 -
Leetcode|1.Two Sum两数之和.java
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例 :给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]标签数组;哈希表解题思路方法一:暴力枚举将每个数与后面的数都做一个比较,找出符合条件数对应的索引,将返回进行返回即可。但原创 2020-12-09 16:16:48 · 46 阅读 · 0 评论 -
Leetcode︱283. Move Zeroes移动零.java
题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例 :输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。标签数组;双指针解题思路方法一:暴力遍历在统计0的个数的同时,将零元素后面的数都前移一位,直到遍历结束,再将最后num位置为0,完成任务。方法二:技巧解法创建两个指针i和j,第一次遍历的时候指针j用来记录当前有多少非0元素。即遍历的时候每遇原创 2020-12-08 14:10:55 · 78 阅读 · 0 评论 -
Leetcode︱350.Intersection of Two Arrays两个数组的交集.java
题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]标签哈希表;排序;数组;双指针解题思路方法一:哈希表由于同一个数字在两个数组中都可能出现多次,因此可以用哈希表存储每个数字出现的次数。对于一个数字,其在交集中出现的次数等于该数字在两个数组中出现次数的最小值。首先遍历第一个数组,原创 2020-12-07 21:22:31 · 61 阅读 · 0 评论 -
Leetcode︱66.Plus One 加一.java
题目给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]1 <=原创 2020-12-07 21:17:58 · 75 阅读 · 0 评论