LeetCode刷题集合
文章平均质量分 54
Brother汤
“并非天赋异禀,只有天道酬勤”
展开
-
Leetcode 509.斐波那契数
写在前面:今天划个水,写个斐波那契数,斐波那契数应该算是动态规划里的入门级别的,之前用的是递推的方式,这次试下动态规划文章目录509.斐波那契数1137.第N个泰波那契数509.斐波那契数斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n) 。示例1输入:n.原创 2022-03-02 09:20:03 · 234 阅读 · 1 评论 -
Leetcode 121.买卖股票的最佳时机
写在前面:动态规划那常见的几个步骤确定状态找到转移公式确定初始条件以及边界条件计算结果文章目录题目示例1示例2解题思路方法一:暴力破解方法二:动态规划题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例1输入:[7,1,5,.原创 2022-03-01 20:21:12 · 96 阅读 · 5 评论 -
爬楼梯(初识动态规划)
写在前面:动态规划的应用十分广泛,这是博主第一次接触动态规划的内容,学起来也是比较吃力的,题解的代码精简,但解题的思维很深,就先拿入门的两道题来了解它吧文章目录70.爬楼梯746.花费最小花费爬楼梯70.爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶解题思路:我是先举例,然后找规律的int [] plt=new i.原创 2022-02-28 12:59:32 · 261 阅读 · 13 评论 -
Leetcode 2016.增量元素之间的最大差值(每日一练)
文章目录引言题目示例1示例2解题思路方法一方法二引言大家好,我是Brother汤,一个正在备战蓝桥杯的萌新,初学算法,请多指教,今天的写的每日一题也是第一次A出来的每日一题,坚持就会有收获,加油。题目给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。返回 最大差值 。如果不存在满足要求的 i 和 j ,返回原创 2022-02-26 08:48:53 · 603 阅读 · 6 评论 -
Leetcode 108.将有序数组转换成二叉搜索树
文章目录题目示例1示例2解题思路代码题目给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例1示例2解题思路1.题意:根据升序数组,恢复一棵高度平衡的BST🌲。2.分析:BST的中序遍历是升序的,因此本题等同于根据中序遍历的序列恢复二叉搜索树。因此我们可以以升序序列中的任一个元素作为根节点,以该元素左边的升序序列构建左子树,以该元素右边的升序序原创 2022-02-25 20:44:18 · 146 阅读 · 0 评论 -
Leetcode 102.二叉树的层序遍历
文章目录题目示例1示例2解题思路代码题目给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例1输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例2输入:root = [1]输出:[[1]]解题思路提到层序遍历,那就不得不提到BFS(广度优先搜索)BFS 遍历使用队列数据结构,我们先看看在二叉树上进行 BFS 遍历的代码:void bfs(TreeNode原创 2022-02-25 20:13:29 · 805 阅读 · 4 评论 -
剑指 Offer 55 - I. 二叉树的深度
文章目录题目示例解题思路代码题目输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。示例给定二叉树 [3,9,20,null,null,15,7]返回它的最大深度 3 。解题思路后序遍历(DFS)树的后序遍历 / 深度优先搜索往往利用 递归 或 栈 实现,本文使用递归实现。关键点: 此树的深度和其左(右)子树的深度之间的关系。显然,此树的深度 等于 左子树的深度 与 右子树的深度 中的 最大值 +1+1终止条原创 2022-02-25 10:52:58 · 144 阅读 · 0 评论 -
剑指offer 25.合并两个排序的链表
文章目录题目示例1解题思路代码题目输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路思路是引入伪头节点: 由于初始状态合并链表中无节点,因此循环第一轮时无法将节点添加到合并链表中。解决方案:初始化一个辅助节点 dum 作为合并链表的伪头节点,将各节点添加至 dum 之后,然后再定义一个cur节点,用来在dum后连接节点原创 2022-02-24 10:55:05 · 423 阅读 · 0 评论 -
删除链表的倒数第N个节点_剑指offerII021
文章目录题目示例1示例2解题思路代码题目给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例1输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例2输入:head = [1], n = 1输出:[]解题思路第一遍写,我是准备用一次遍历求长度,然后找到倒数第n个节点,但是没搞出来。看了别人的解法后,学习到了快慢指针。开始也没明白,为啥快指针走完,这个慢指针为啥就走到了倒数第n的位置呢,看了几遍后发现这是一个数学问题,例上图,原创 2022-02-24 09:52:54 · 516 阅读 · 0 评论 -
Leetcode 14.最长公共前缀
文章目录题目示例1示例2解题思路代码题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例1输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例2输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。解题思路1,当字符串数组长度为 0 时则公共前缀为空,直接返回2,令最长公共前缀 ans 的值为第一个字符串,并进行初始化3,遍历后面的字符串,依原创 2022-02-23 19:33:53 · 81 阅读 · 0 评论 -
Leetcode 917.仅仅反转字符(每日一题)
文章目录题目示例1示例2解题思路代码题目给你一个字符串 s ,根据下述规则反转字符串:所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。返回反转后的 s 。示例1输入:s = “ab-cd”输出:“dc-ba”示例2输入:s = “Test1ng-Leet=code-Q!”输出:“Qedo1ct-eeLg=ntse-T!”解题思路反转,我想到的是双指针,一个指向头,一个指向尾,然后分别判断是否为字母,当同时为字母的时候,交换。本题中新学到的俩个方法:原创 2022-02-23 10:56:49 · 383 阅读 · 1 评论 -
Leetcode 344.反转字符串
文章目录题目示例1示例2解题思路代码题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例1输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例2输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]解题思路题外之言,这是原创 2022-02-23 09:21:23 · 71 阅读 · 0 评论 -
Leetcode 387.字符串中的第一个唯一字符
文章目录题目示例1示例2解题思路代码题目给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。示例1输入: s = “leetcode”输出: 0示例2输入: s = “loveleetcode”输出: 2解题思路哈希表中的HashMap来解决本题1,第一遍遍历,得到出现字符及其出现的次数。2,第二遍遍历,遇到第一个出现次数为1的字符,返回其索引。本题中会用到HashMap的getordeafault()方法这是这个方法的源原创 2022-02-22 12:58:05 · 310 阅读 · 0 评论 -
Leetcode 189.轮转数组
文章目录题目示例1示例2解题思路方法一:遍历+额外数组代码1方法二:数组翻转代码2题目给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例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,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]示例2输入:nums = [-1,-100,3,99],原创 2022-02-21 19:30:13 · 90 阅读 · 0 评论 -
Leetcode 350.两个数组的交集II
文章目录题目示例1示例2解题思路代码题目给你两个整数数组 nums1 和 nums2,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。示例1输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例2输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]解题思路1,和349题一样也是求交集,原创 2022-02-21 10:47:30 · 379 阅读 · 0 评论 -
Leetcode 349.两个数组的交集
文章目录题目示例1示例2解题思路代码后言题目给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。示例1输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例2输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]解释:[4,9] 也是可通过的解题思路1,求交集,然后不出现重复的数,然后我就想到了hashSet的去重方法。原创 2022-02-21 10:28:06 · 390 阅读 · 0 评论 -
Leetcode 136.只出现一次的数字
文章目录题目示例1示例2思路代码后言题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例1输入: [2,2,1]输出: 1示例2输入: [4,1,2,1,2]输出: 4思路因为题目说不使用额外空间,那么双重循环则是直接用不了了。网上看了其他的博主的文章后,想起了一个叫异或的知识点,茅塞顿开。代码class Solution { publ原创 2022-02-20 20:57:51 · 167 阅读 · 0 评论 -
Leetcode 717.1比特与2比特字符
文章目录题目示例1示例2思路代码后言题目有两种特殊字符:第一种字符可以用一个比特 0 来表示第二种字符可以用两个比特(10 或 11)来表示、给定一个以 0 结尾的二进制数组 bits ,如果最后一个字符必须是一位字符,则返回 true 。示例1输入: bits = [1, 0, 0]输出: true解释: 唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。示例2输入: bits = [1, 1, 1, 0]输出: false解释: 唯一的编码方原创 2022-02-20 20:09:11 · 146 阅读 · 0 评论 -
Leetcode 1984.学生分数的最小差值
文章目录题目示例1示例2思路代码题目给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。从数组中选出任意 k 名学生的分数,使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。返回可能的 最小差值 。示例1输入:nums = [90], k = 1输出:0解释:选出 1 名学生的分数,仅有 1 种方法:[90] 最高分和最低分之间的差值是 90 - 90 = 0可能的最小差值是 0示例2输入:n原创 2022-02-11 09:54:52 · 314 阅读 · 2 评论 -
Leetcode 169.多数元素
文章目录题目示例1示例2思路代码题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1输入:[3,2,3]输出:3示例2输入:[2,2,1,1,1,2,2]输出:2思路对数组进行排序,无论多数元素大小如何,数组元素个数是奇数还是偶数,对数组排好序之后,因为这个元素的数量大于数组长度的一半,所以多数元素总会在nums[n/2]出现。代码public in原创 2022-01-21 11:25:49 · 401 阅读 · 4 评论 -
Leetcode 202.快乐数
文章目录题目示例1示例2思路代码题目编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。 如果 n 是快乐数就返回 true ;不是,则返回 false 。示例1输入:n = 19输出:true解释:1^2 + 9 ^2 = 828^ 2 + 2 ^2 = 686 ^2 + 8 ^2 =原创 2022-01-21 11:03:28 · 222 阅读 · 0 评论 -
剑指offer 18.删除链表的节点
文章目录题目示例1示例2题目给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例1输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例2输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调原创 2022-01-21 10:25:57 · 197 阅读 · 0 评论 -
Leetcode 160.相交链表
文章目录题目示例1示例2思路代码题目给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。示例1输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA= 2, skipB = 3输出:Int原创 2022-01-20 19:27:54 · 199 阅读 · 0 评论 -
Leetcode 26.删除有序数组中重复项
文章目录题目示例1示例2思路代码题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例1输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例2输入:nums = [0,0,1原创 2022-01-20 11:25:58 · 57 阅读 · 0 评论 -
Leetcode 2029.石子游戏IX
文章目录题目示例1示例2思路代码题目Alice 和 Bob 再次设计了一款新的石子游戏。现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值。给你一个整数数组stones ,其中 stones[i] 是第 i 个石子的价值。Alice 和 Bob 轮流进行自己的回合,Alice 先手。每一回合,玩家需要从 stones 中移除任一石子。如果玩家移除石子后,导致 所有已移除石子 的价值 总和 可以被 3 整除,那么该玩家就 输掉游戏 。如果不满足上一条,且移除后没有任何剩余的石子,那么原创 2022-01-20 11:04:32 · 2587 阅读 · 0 评论 -
Leetcode 141. 环形链表
文章目录题目示例1示例2思路代码题目给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例1输入:head = [3,2,0,-原创 2022-01-19 18:59:14 · 50 阅读 · 0 评论 -
Leetcode 219. 存在重复元素 II
文章目录题目示例1示例2思路代码题目给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j]且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。示例1输入:nums = [1,2,3,1], k = 3输出:true示例2输入:nums = [1,2,3,1,2,3], k = 2输出:false思路1,第一次提交打算偷懒,写俩个for循环,进行判原创 2022-01-19 11:35:24 · 336 阅读 · 0 评论 -
Leetcode 12. 整数转罗马数字
文章目录题目示例1示例2思路代码题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXV原创 2022-01-19 10:49:03 · 75 阅读 · 0 评论 -
剑指 Offer II 027. 回文链表
文章目录题目示例1示例2解题思路总结题目给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。示例1输入: head = [1,2,3,3,2,1]输出: true示例2输入: head = [1,2]输出: false解题思路1.先试用快慢指针找到中间节点的位置。2.然后将中间节点以后的部分逆序过来,末尾节点成为一个头结点。3.同时从俩边开始遍历并判断。//方法三,使用0(1)额外空间的方法原创 2022-01-18 18:59:27 · 550 阅读 · 1 评论 -
剑指offer 24.反转链表
文章目录题目示例思路伪代码总结题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路首先用额外的指针temp保存cur指针指向节点的后继节点,然后让cur指针指向节点的next指针指向其前驱节点,即cur->next = pre,然后不断后移,直至cur指向空。伪代码public ListNode原创 2022-01-18 18:45:53 · 227 阅读 · 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-18 11:21:22 · 165 阅读 · 1 评论 -
Leetcode 88.合并两个有序数组(Java)
文章目录题目示例1示例2方法1题目给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例1输入原创 2022-01-14 09:45:05 · 435 阅读 · 4 评论 -
LeetCode 1. 俩数之和(Java)
1.题目给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3...原创 2021-12-01 13:44:14 · 215 阅读 · 14 评论