![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
千叶真尹
这个作者很懒,什么都没留下…
展开
-
动态规划-关于dp[i]含义的一点心得
关于dp[i]的含义,目前接触到的有两种:第一种:dp[i]表示以索引i结尾的最大值,这种情况包含的结果内必须是i是最后一个元素,包括下标i之前的最大连续子序列和为dp[i]。举例:leetcode53. 最大子数组和给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1.原创 2022-03-11 15:46:11 · 874 阅读 · 0 评论 -
leetcode二叉树103二叉树的锯齿形层序遍历
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]注意点:关于顺序的问题1.removeFirst()永远是和addLast()搭配,removeLast()永远是和原创 2022-02-22 18:09:57 · 6865 阅读 · 0 评论 -
leetcode回溯五题
回溯模板:void backtracking(){if(终止条件) {收集结果return }for(集合的元素集,类似子节点的个数){处理结点递归函数;回溯操作(撤销处理结点12, 2撤销 ,13 撤销3, 14)}}何时要startindex?(在组...原创 2022-02-07 16:09:33 · 5541 阅读 · 0 评论 -
leetcode15. 三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]思路:排序,一次遍历+双指针注意点:需要去重有三个点需要去重...原创 2022-02-04 17:37:25 · 72 阅读 · 0 评论 -
leetcode双指针11盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。示例 2:输入..原创 2022-02-04 16:42:35 · 73 阅读 · 0 评论 -
leetcode字符串5最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"思路:遍历字符串,对每个位置进行一次判定(在其位置的最大回文子串)注意:回文子串不是指非得从中间开始的,例如ccccbbaabb,最大回文子串为bbaabb,因此需要从每个位置都要遍原创 2022-02-02 14:37:11 · 168 阅读 · 0 评论 -
leetcode字符串3无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"...原创 2022-02-01 17:04:03 · 6340 阅读 · 0 评论 -
leetcode链表2两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,原创 2022-01-30 17:04:12 · 91 阅读 · 0 评论 -
leetcode二进制461汉明距离
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y,计算并返回它们之间的汉明距离。示例 1:输入:x = 1, y = 4输出:2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。示例 2:输入:x = 3, y = 1输出:1注意点:1. Integer.bitCount(参数) 统计参数中有几个12. 异或运算 ^ 相同为0,不同为1...原创 2022-01-30 16:12:59 · 1659 阅读 · 0 评论 -
leetcode二分法剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在重复元素值的数组numbers,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0使用二分查找:原本是一个排好序的数组,现分为两个排好序的数组,里面有个分隔点(也就是最...原创 2022-01-27 15:47:59 · 76 阅读 · 0 评论 -
leetcode112. 路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解释:等于目标和的根节点到叶节点路径如上图所示。三部曲:终止条件;返回原创 2022-01-27 15:01:20 · 367 阅读 · 0 评论 -
leetocde双指针剑指 Offer 57 - II. 和为s的连续正数序列
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]思路:双指针引用自作者:jyd设连续正整数序列的左边界 ii 和右边界 jj ,则可构建滑动窗口从左向右滑动。循环中,每轮判断滑动窗口内元素原创 2022-01-26 16:11:54 · 63 阅读 · 0 评论 -
leetcode剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","appendTail.原创 2022-01-26 14:54:30 · 63 阅读 · 0 评论 -
leetcode剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出...原创 2022-01-25 20:08:06 · 186 阅读 · 0 评论 -
leetcode数组118. 杨辉三角
给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例2:输入: numRows = 1输出: [[1]]注意点1:注意这种嵌套写法,不一定要分开来写,可以一步到位,按照题目返回的类型写ArrayList<List<Integer>>...原创 2022-01-25 17:38:33 · 157 阅读 · 0 评论 -
leetcode字符串剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2输出:"cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出:"umghlrlose"思路1:substring(起点(包含),终点(不包含))public class reverse..原创 2022-01-25 16:56:41 · 73 阅读 · 0 评论 -
leetcode二叉树226翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1解析:每次交换的是当前节点其左右子节点的值我们来看一下递归三部曲:确定递归函数的参数和返回值参数就是要传入节点的指针,不需要其他参数了,通常此时定下来主要参数,如果在写递归的逻辑中发现还需要其他参数的时候,随时补充。返回值的话其实也不需要,但是题目中...原创 2022-01-21 14:19:20 · 77 阅读 · 0 评论 -
leetcode字符串剑指 Offer 05替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."思路:将字符串转为字符数组遍历字符数组,如果是空格,stringbuilder.append("%20")注意:在if( ' ' == (chars[i]) )中,必须用单引号,因为 chars[i] 为字符类型,如果用双引号为字符串类型,无法比较,会报错!必须用单引号和字符类型比较public class replac原创 2022-01-20 16:02:26 · 55 阅读 · 0 评论 -
单链表翻转
之前写过一个单链表翻转的题,但是当时自己对翻转的过程还是一知半解,现再次记录下自己新的理解。循环代码中,一共有四行第一行是为了存储next元素的值,因为下一步操作改方向,会让next元素这个值找不到位置了第二行是为了换方向,指明 cur.next 指向哪里第三行和第四行是为了换位置,需要找下一回他们坐在哪里。注意到此时 cur 位置已经找到了(小板凳做好了),就是此时 next 的位置,所以要想给 pre 找位置,而下一回 pre 的位置在 cur,所以 先 pre = cur,给原创 2022-01-20 15:39:46 · 195 阅读 · 0 评论 -
leetcode双指针167两数之和 II - 输入有序数组
给定一个已按照 非递减顺序排列的整数数组numbers ,请你从数组中找出两个数满足相加之和等于目标数target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。示例 1:输入:numbers = [2,7,11,1...原创 2022-01-19 13:45:49 · 1925 阅读 · 0 评论 -
leetcode栈剑指 Offer 06从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]思路:用栈的思想,先进后出先遍历一遍链表,将元素添加进栈中然后从栈顶开始,依次弹出元素,存储到数组中class Solution { public int[] reversePrint(ListNode head) { Stack<ListNode> stack = new Stack<ListNode原创 2022-01-19 11:06:19 · 165 阅读 · 0 评论 -
leetcode二叉树111二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5做递归的题目也有一阵子了,却感觉自己总在门外徘徊,在此引用leetcode上别人关于递归的一个总结(来自main):写出结束条件 不要把树复杂化,就当做树是三原创 2022-01-18 14:16:12 · 71 阅读 · 0 评论 -
leetcode二分法69Sqrt(x)
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。示例 1:输入:x = 4输出:2示例 2:输入:x = 8输出:2解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。class Solution { public int mySqrt(int x)原创 2022-01-17 14:15:51 · 220 阅读 · 0 评论 -
leetcode数组66加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 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]思路:首先判断.原创 2022-01-17 10:22:10 · 64 阅读 · 0 评论 -
leetcode栈225用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。思路:参考leetcode为了满足栈的特性,即最后入栈的元素最先出栈,在使用队列实现栈时,应满足队列前端的元素是最后入栈原创 2022-01-14 16:00:57 · 815 阅读 · 0 评论 -
leetcode9回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。.原创 2022-01-14 15:32:00 · 153 阅读 · 0 评论 -
leetcode哈希表409最长回文串
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:"abccccdd"输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。注意点:1.使用了一个长度为128的数组,存储每个字符出现的次数,这是因为字符的 ASCII 值的范围为[0,128) char类型做运算时会自动将字符转换..原创 2022-01-14 14:16:15 · 100 阅读 · 0 评论 -
leetcode哈希表349两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]注意点:1.用两个set去重,在用第二个set的时候,可以先判断该元素是否已经在第一个set中出现过了,这样第二个set添加的都是两边都有的元素2.set集合转int数组:由于set没有索引,因此使用迭代器+自定义索引进行遍历p原创 2022-01-14 10:48:46 · 75 阅读 · 0 评论 -
leetcode哈希表290单词规律
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = "abba", str = "dog cat cat dog"输出: true示例 2:输入:pattern = "abba", str = "dog cat cat fish"输出: false示例 3:输入: pattern =原创 2022-01-13 15:33:39 · 187 阅读 · 0 评论 -
leetcode哈希表219存在重复元素 II
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2,3,1,2,3], k = 2输出: false思路:1.遍历数组,使用hashmap进行存储,key原创 2022-01-13 11:28:57 · 161 阅读 · 0 评论 -
leetcode哈希表202快乐数
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false 。示例 1:输入:n = 19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1示例 2:..原创 2022-01-12 15:44:51 · 173 阅读 · 0 评论 -
leetcode字符串125验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串思路:过滤+双指针判断注意点:Character.isLetterOrDigit.原创 2022-01-12 09:51:44 · 44 阅读 · 0 评论 -
leetcode字符串67二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"思路:二进制求和1.统一两个字符串长度,长度短的补02.从最后一位开始,倒序遍历,分情况讨论 2.1定义一个字符,表示是否需要进位 2.2如果两个都是1或者两个都是0,则累加后当前位总是...原创 2022-01-11 15:31:16 · 249 阅读 · 0 评论 -
leetcode字符串14最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。思路:/*首先是两个字符串的比较:定义一个函数,比较两个字符串,返回其公共的前缀然后遍历字符串数组,将比较的结果与后一个字符串比较,并将其结果覆盖赋值给比较的结果 .原创 2022-01-10 14:28:18 · 250 阅读 · 0 评论 -
leetcode字符串13罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字2写做II,即为两个并列的 1 。12写做XII,即为X+II。27写做XXVII, 即为XX+V+II...原创 2022-01-10 10:38:26 · 57 阅读 · 0 评论 -
leetcode排序506相对名次
给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。运动员的名次决定了他们的获奖情况:名次第 1 的运动员获金牌 "Gold Medal" 。名次第 2 的运动员获银牌 "Silver Medal" 。名次第 3 的运动员获铜牌 "Bronze Medal" 。从名次第 4 到第 n 的运动员,只能获得他们的名原创 2022-01-07 14:30:57 · 76 阅读 · 0 评论 -
leetcode455分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j]>= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值...原创 2022-01-07 13:40:07 · 77 阅读 · 0 评论 -
leetcode排序414第三大的数
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。示例 1:输入:[3, 2, 1]输出:1解释:第三大的数是 1 。示例 2:输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。示例 3:输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。思路:排序+反转+遍历注意遍历的原创 2022-01-07 09:59:00 · 62 阅读 · 0 评论 -
leetcode389找不同
给定两个字符串 s 和 t,它们只包含小写字母。字符串t由字符串s随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例 1:输入:s = "abcd", t = "abcde"输出:"e"解释:'e' 是那个被添加的字母。示例 2:输入:s = "", t = "y"输出:"y"示例 3:输入:s = "a", t = "aa"输出:"a"示例 4:输入:s = "ae", t = "aea"输出:"a"思路1:两个字符串中...原创 2022-01-06 10:19:35 · 272 阅读 · 0 评论 -
leetcode268丢失的数字
给定一个包含 [0, n]中n个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。示例 1:输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 2:输入:nums = [0,1]输出:2解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 3:...原创 2022-01-06 09:32:03 · 524 阅读 · 0 评论