
LeetCode
相关刷题记录
毛卷卷dd
这个作者很懒,什么都没留下…
展开
-
Boyer-Moore 投票算法(摩尔投票算法)
做leetcode了解的,挺简单的算法,但是一下子也没有那么容易想到。原创 2023-10-24 16:43:05 · 195 阅读 · 0 评论 -
222. 完全二叉树的节点个数
【问题描述】给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。【解答】如果左子树深度等于右子树深度, 则左子树是满二叉树.........原创 2022-07-05 14:52:53 · 80 阅读 · 0 评论 -
136. 只出现一次的数字
【题目描述】给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。【解答】排序+遍历原创 2022-07-05 14:53:22 · 69 阅读 · 0 评论 -
80. 删除有序数组中的重复项 II
【题目描述】给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。【解答】是一种遍历方式,判断当前节点是否需要被覆盖...原创 2022-06-29 13:26:51 · 88 阅读 · 0 评论 -
73. 矩阵置零
【题目描述】给定一个 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。【解答】做法任意,我标记了化为0的行和列原创 2022-06-29 01:32:45 · 282 阅读 · 0 评论 -
63. 不同路径 II
【题目描述】一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。【解答】与62题异曲同工...原创 2022-06-29 01:26:57 · 64 阅读 · 0 评论 -
64. 最小路径和
【描述】给定一个包含非负整数的 网格 ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。【解答】与62异曲同工原创 2022-06-29 01:18:08 · 83 阅读 · 0 评论 -
62. 不同路径
【题目描述】一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?【解答】递推常见...原创 2022-06-29 01:10:59 · 210 阅读 · 0 评论 -
58. 最后一个单词的长度
【题目描述】给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。【解答】从后往前扫描即可......原创 2022-06-29 01:03:56 · 77 阅读 · 0 评论 -
56. 合并区间
【题目】以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。【解题记录】这个算法老师上课讲过(复盘的时候才想起来)【看懂while循环就是重点】...原创 2022-06-29 00:58:51 · 68 阅读 · 0 评论 -
53. 最大子数组和
【题目描述】给你一个整数数组 ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。【解答】附上题解链接:(很喜欢这种精悍的代码)力扣https://leetcode.cn/problems/maximum-subarray/solution/zui-da-zi-xu-he-by-leetcode-solution/...原创 2022-06-29 00:48:03 · 1918 阅读 · 0 评论 -
50. Pow(x, n)
【题目描述】实现 pow(x, n) ,即计算 的整数 次幂函数(即, )。【代码】小数版快速幂原创 2022-06-29 01:05:44 · 91 阅读 · 0 评论 -
49. 字母异位词分组
【题目描述】给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。【解答】典型的mapget到了emplace_back的美妙!...原创 2022-06-29 00:37:33 · 337 阅读 · 0 评论 -
46. 全排列
【题目描述】给定一个不含重复数字的数组 ,返回其所有可能的全排列 。你可以 按任意顺序 返回答案。【解答】(pascal后遗症,喜欢手工栈)原创 2022-06-28 16:19:56 · 74 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置
【题目描述】给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。【代码】二分查找位置再遍历(其实遍历也可以二分)...原创 2022-06-28 15:34:03 · 89 阅读 · 0 评论 -
36. 有效的数独
【题目描述】请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用 '.' 表示。【解答】挨个判断条件(memset复健)...原创 2022-06-28 15:20:50 · 147 阅读 · 0 评论 -
22. 括号生成
【题目描述】数字 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。【解答】生成所有左括号和右括号的排列,检查是否合法(多一个剪枝,判断一下当前是否能加右括号)...原创 2022-06-28 15:03:21 · 125 阅读 · 0 评论 -
18. 四数之和
【题目描述】给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 ...原创 2022-06-28 14:53:32 · 72 阅读 · 0 评论 -
17. 电话号码的字母组合
【题目】给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。【解答】回溯+递归(呜呜呜为什么想好久)map太香了(来自一个不喜欢用map的菜菜狗)......原创 2022-06-28 14:21:39 · 71 阅读 · 0 评论 -
15. 三数之和
【题目描述】给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。【解答】按元素枚举(保证每一次枚举的元素的下一个都比当前值大)(题解的结构写的很清晰了:链接:https://leetcode.cn/problems/3sum/solution/san-shu-zhi-he-by-leetcode-solution/)...原创 2022-06-28 14:00:49 · 120 阅读 · 0 评论 -
剑指 Offer II 020. 回文子字符串的个数
【题目描述】给定一个字符串 ,请计算这个字符串中有多少个回文子字符串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。【解答】1.第一种方式肯定是枚举啦,枚举不同区间的开头和结尾,然后看看是不是回文的2.嗅到了一种DP的味道:dp[i][j]判断一下i和j位置的一样吗?...原创 2022-06-28 01:16:25 · 69 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
【题目描述】请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。【解答】其实对称就是变相的判断一下回文数(真的当时就这么想的)简单的说就是:左右子节点的值要相等;左右子节点的子树要对称相等;(下面贴的是官方的解答,觉得比自己写的简洁)...原创 2022-06-28 00:53:21 · 143 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先
【题目描述】给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”【解答】好久不碰树了(这对于计算机的宝宝是不是不正常哭泣)若root是p,q的最近公共祖先 ,则分成三种情况:1. p和q分别在root的左右子树中2. p,q同属一个左右子树,并且q=root3. p,q同属一个左右子树,并且p=root(所以可以递归算)..原创 2022-06-28 00:40:19 · 126 阅读 · 0 评论 -
1340. 跳跃游戏 V
题目描述给你一个整数数组 和一个整数 。每一步你可以从下标 跳到:除此以外,你从下标 跳到下标 需要满足: 且 ,其中下标 是所有 到 之间的数字(更正式的,)。你可以选择数组的任意下标开始跳跃。请你返回你 最多 可以访问多少个下标。请注意,任何时刻你都不能跳到数组的外面。解答感觉其实和前两个跳跃游戏有异曲同工之妙,都是在跳转中判断怎么跳,可不可以跳,跳多远。所以第一种尝试的方法就是顺序遍历+深搜,因为可以选择数组的任意下标开始跳跃,还需要枚举起点(虽然感觉其实最后是强连通的,瞎说的,因为原创 2022-06-10 02:59:41 · 424 阅读 · 0 评论 -
55. 跳跃游戏
题目描述给定一个非负整数数组 ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。解答1.最初是想用刚刚做的那个跳跃游戏(低阶动规版)同样的思路解决的,但是发现超时了2.终于有一点点理解人家为什么是贪心了,因为其实是可以一直确定当前能到达的最远点是哪里的,因为是完整的覆盖...原创 2022-06-08 23:24:40 · 391 阅读 · 0 评论 -
45. 跳跃游戏 II
题目描述给你一个非负整数数组 ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。解答最简单的思路:当前位置的最优的来源是前面所有能到达它的节点中步数最小的+1那么变递归为递推,站在初始节点,可以不断去更新它能到达的点的最小步数。BUG可能能到达的节点超过了范围,记得判断...原创 2022-06-08 23:13:23 · 369 阅读 · 0 评论 -
剑指 Offer II 016. 不含重复字符的最长子字符串
题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。解答1.枚举开头和结尾(超时)2.有点滑动窗口的味道(因为好久没有接触了,记忆有点模糊)class Solution {public: int lengthOfLongestSubstring(string s) { bool f[500]={0}; if (s.length()==0) return 0; int l=0,r=0,ans=0,原创 2022-06-01 22:48:22 · 71 阅读 · 0 评论 -
剑指 Offer II 072. 求平方根
题目描述给定一个非负整数 x ,计算并返回 x 的平方根,即实现 int sqrt(int x) 函数。正数的平方根有两个,只输出其中的正数平方根。如果平方根不是整数,输出只保留整数的部分,小数部分将被舍去。解答遍历枚举class Solution {public: int mySqrt(int x) { int i=0; while ((long long)i*i<=x) i++; return原创 2022-06-01 22:48:33 · 141 阅读 · 0 评论 -
剑指 Offer II 069. 山峰数组的顶部
题目描述符合下列属性的数组 arr 称为 山峰数组(山脉数组) :arr.length >= 3 存在i(0 < i< arr.length - 1)使得: arr[0] < arr[1] < ... arr[i-1] < arr[i] arr[i] > arr[i+1] > ... > arr[arr.length - 1] 给定由整数组成的山峰数组 arr ,返回任何满足 arr[0] < arr[1] < .....原创 2022-06-01 22:48:43 · 61 阅读 · 0 评论 -
剑指 Offer II 068. 查找插入位置
题目描述给定一个排序的整数数组nums和一个整数目标值target,请在数组中找到target,并返回其下标。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(log n)的算法。解答二分查找的经典应用场景和经典算法class Solution {public: int searchInsert(vector<int>& nums, int target) { int n = nums.siz...原创 2022-06-01 22:48:54 · 57 阅读 · 0 评论 -
剑指 Offer II 075. 数组相对排序
问题描述给定两个数组,arr1和arr2,arr2中的元素各不相同 arr2中的每个元素都出现在arr1中对arr1中的元素进行排序,使arr1中项的相对顺序和arr2中的相对顺序相同。未在arr2中出现过的元素需要按照升序放在arr1的末尾。解答其实就是查找对应的字符放在一起(调换位置),最后剩下的排序class Solution {public: vector<int> relativeSortArray(vector<...原创 2022-06-01 22:49:25 · 262 阅读 · 0 评论 -
剑指 Offer II 018. 有效的回文
题目描述给定一个字符串s,验证s是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。本题中,将空字符串定义为有效的回文串。解答双指针,记得跳过空格class Solution {public: bool is_use(char c) { if (c>='0'&&c<='9') return 1; if (c>='a'&&c<='z') return 1; ...原创 2022-06-01 22:49:38 · 58 阅读 · 0 评论 -
剑指 Offer II 019. 最多删除一个字符得到回文
题目描述给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。解答1.暴力枚举那个删去的字符串2.又有一点某递归题目的意思:如果头尾两个指针指向的字符不同,则两个字符中必须有一个被删除,此时我们就分成两种情况:即删除左指针对应的字符,或者删除右指针对应的字符,当这两个子串中至少有一个是回文串时,即可返回true。class Solution {public: bool pd(string s) { int i=0, j原创 2022-06-01 22:49:51 · 98 阅读 · 0 评论 -
剑指 Offer II 027. 回文链表
题目描述给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。进阶:能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?解答既然给了进阶提示,那么就自然而然想到了字符串 超出了时间限制class Solution {public: bool isPalindrome(ListNode* head) { string a; while (head!=NULL)原创 2022-06-01 22:50:11 · 57 阅读 · 0 评论 -
剑指 Offer II 032. 有效的变位词
题目描述给定两个字符串s和t,编写一个函数来判断它们是不是一组变位词(字母异位词)。注意:若s和t中每个字符出现的次数都相同且字符顺序不完全相同,则称s和t互为变位词(字母异位词)。解答利用类似桶排序的思想看看每个字母有几个,最后遍历看一下个数是否相同class Solution {public: bool isAnagram(string s, string t) { if (s==t) return false; i...原创 2022-06-01 22:50:24 · 63 阅读 · 0 评论 -
剑指 Offer II 034. 外星语言是否排序
题目描述某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。解答1.将外星语用我们的英语替换,看看是否是字典序排列2.按照题目要求挨个检查class Solution {public: bool is_smaller(string s1,string s2,stri原创 2022-06-03 01:44:52 · 207 阅读 · 0 评论 -
剑指 Offer II 101. 分割等和子集
题目描述给定一个非空的正整数数组 nums ,请判断能否将这些数字分成元素和相等的两部分。解答这道题可以换一种表述:给定一个只包含正整数的非空数组,判断是否可以从数组中选出一些数字,使得这些数字的和等于整个数组的元素和的一半。因此这个问题可以转换成「0−1 背包问题」。这道题与传统的「0−1 背包问题」的区别在于,传统的「0−1 背包问题」要求选取的物品的重量之和不能超过背包的总容量,这道题则要求选取的数字的和恰好等于整个数组的元素和的一半。类似于传统的「0−1 背包问题」,可以使用动态规划求解原创 2022-06-03 01:45:09 · 180 阅读 · 0 评论 -
剑指 Offer II 041. 滑动窗口的平均值
题目描述给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算滑动窗口里所有数字的平均值。实现 MovingAverage 类:MovingAverage(int size)用窗口大小size初始化对象。 double next(int val)成员函数next每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后size个值的移动平均值,即滑动窗口里所有数字的平均值。解答 记得要把sum的类型记为doubleclass MovingAverag......原创 2022-06-03 01:45:19 · 69 阅读 · 0 评论 -
剑指 Offer II 042. 最近请求次数
题目描述写一个 RecentCounter 类来计算特定时间范围内最近的请求。请实现 RecentCounter 类:RecentCounter()初始化计数器,请求数为 0 。 int ping(int t)在时间t添加一个新请求,其中t表示以毫秒为单位的某个时间,并返回过去3000毫秒内发生的所有请求数(包括新请求)。确切地说,返回在[t-3000, t]内发生的请求数。保证 每次对 ping 的调用都使用比之前更大的 t 值。解答 我还是对这种涉及几个函数的......原创 2022-06-03 01:45:31 · 105 阅读 · 0 评论 -
剑指 Offer II 088. 爬楼梯的最少成本
题目描述数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。解答简单的动规,选择1/2中小的那个class Solution {public: int minCostClimbingStairs(vector<int>&.原创 2022-06-03 01:45:42 · 75 阅读 · 0 评论