![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题记录
眼含星辰.
身在井隅 眼含星辰 心向璀璨
展开
-
700. 二叉搜索树中的搜索
题目描述给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。来源:力扣(LeetCode)链接:https://leetcode-cn.com/pro原创 2021-12-28 19:52:54 · 132 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
题目描述给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。注意:本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-su原创 2021-12-27 21:43:43 · 103 阅读 · 0 评论 -
116. 填充每个节点的下一个右侧节点指针
题目描述给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problem原创 2021-12-20 19:18:01 · 382 阅读 · 0 评论 -
78. 子集
题目描述给你一个整数数组nums, 数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]解题分析使用dfs回溯递归的方法,dfs函数的功能是包含三个部分:1.记录答案,2.考虑当前位置,3.不考虑当前位置。class Solution {public: vector<int> subs原创 2021-12-12 15:52:12 · 101 阅读 · 0 评论 -
98. 验证二叉搜索树
题目描述给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/validate-binary-search-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题分析使用中序遍历,序列结果满足递增的便原创 2021-12-12 11:32:21 · 299 阅读 · 0 评论 -
33. 搜索旋转排序数组
题目描述整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个原创 2021-12-06 22:08:41 · 63 阅读 · 0 评论 -
3. 无重复字符的最长子串
题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。解题思路使用滑动窗口,然后使用unordered_set判断是否存在重复字符。class Solution {public: int lengthOfLongestSubstring(string s) { unordered_set<char> map; int end=0; int ans=0; for(int index=0; in原创 2021-12-03 20:38:31 · 50 阅读 · 0 评论 -
124. 二叉树中的最大路径和
题目描述:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。原创 2021-10-13 21:15:33 · 69 阅读 · 0 评论 -
239. 滑动窗口最大值
题目描述:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sliding-window-maximum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题分析:使用优先队列记录(nums[i], i),这样在取top的时候先判断index是否原创 2021-10-11 21:44:17 · 64 阅读 · 0 评论 -
189. 旋转数组
题目描述:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/rotate-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题分析:空间复杂度为O(1):1.翻转所有元素2.翻转 [0, k mod n−原创 2021-09-14 21:54:58 · 69 阅读 · 0 评论 -
125. 验证回文串
题目描述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。解题分析:采用双指针的思想,依次判断,遇到非字母和数字字符需跳过。可以使用 isalnum 判断字符是否是字母或数字,使用 tolower 将大写转小写。class Solution {public: bool isPalindrome(string s) { int left=0, right=s.size()-1;原创 2021-09-13 21:54:08 · 62 阅读 · 0 评论 -
739. 每日温度
题目描述:请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。解题分析:如果需要找到左边或者右边第一个比当前位置的数大或者小,则可以考虑使用单调栈;单调栈的题目如接雨水和柱状图最大矩形等等class Solution {public: vector<int> dailyTemperatures(vector<int>& temperatures) {原创 2021-09-07 21:04:56 · 77 阅读 · 0 评论 -
152. 乘积最大子数组
题目描述:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。解题分析:由于存在负数*负数取得最大值得情况,所以维护一个minProductVec,记录负数。状态方程为:maxProductVec[i]=max(maxProductVec[i-1]*nums[i-1], max(minProductVec[i-1]*nums[i-1], nums[i-1]));minProductVec[i]=min(minProductVe原创 2021-09-07 20:28:56 · 77 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
题目描述:给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题原创 2021-09-04 10:29:57 · 70 阅读 · 0 评论 -
221. 最大正方形
题目描述:在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。解题分析:用dp(i,j) 表示以 (i,j) 为右下角,且只包含 1 的正方形的边长最大值。如果该位置的值是 1,则 dp(i,j) 的值由其上方、左方和左上方的三个相邻位置的 dp 值决定。具体而言,当前位置的元素值等于三个相邻位置的元素中的最小值加 1,状态转移方程如下:dp[i][j]=min(dp[i-1][j], min(dp[i][j-1], dp[i-1][j-1]))+1。三个相原创 2021-08-29 10:57:10 · 82 阅读 · 0 评论 -
179. 最大数
题目描述:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。解题分析:通过两个字符串 a+b > b+a 进行排序class Solution {public: string largestNumber(vector<int>& nums) { vector<string> vec; for(int t:nums) v原创 2021-08-28 10:31:04 · 57 阅读 · 0 评论 -
958. 二叉树的完全性检验
题目描述:给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/check-completeness-of-a-binary-tree著作权归领扣网络所有。商业转载请联系官方授权原创 2021-08-18 22:10:05 · 78 阅读 · 0 评论 -
322. 零钱兑换
题目描述:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/coin-change著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题分析:借鉴完全背包的思想,使用动态规划,需要注意的是dp[i原创 2021-08-10 21:45:15 · 58 阅读 · 0 评论 -
50. Pow(x, n)
题目描述:实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。解题分析:使用递归分解即可,不过需要注意的是n为负的最小值的时候,-n会超过int的范围,需要定义long long N=n。class Solution {public: double myPow(double x, int n) { long long N=n; bool isPositive = N>=0 ? true : false; double原创 2021-08-01 10:52:44 · 80 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。原创 2021-07-31 19:17:23 · 47 阅读 · 0 评论 -
300. 最长递增子序列
题目描述:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-increasing-subsequence著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题分析:定义 dp[i] 为考虑前原创 2021-07-30 19:51:00 · 141 阅读 · 0 评论 -
279. 完全平方数
题目描述:给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/perfect-squares著作权归原创 2021-07-27 21:37:28 · 158 阅读 · 0 评论 -
NC35 最小编辑代价
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000解题分析;dp[i][j]的含义为:word1的前i个字符和word2的前j个字符的编辑距离。意思就是word1的前i个字符,变成word2的前j个字符,最少需要这么多步。class Solution {p原创 2021-07-20 21:22:41 · 98 阅读 · 0 评论 -
NC59 矩阵的最小路径和
题目描述:给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。解题分析:因为路径只能往右走和往下走,所以使用动态规划,递推方程为:dp[row][col]=min(dp[row-1][col], dp[row][col-1])+matrix[row][col];注意需要出示话dp的第一行和第一列,因为无法用递推公式求得。class Solution {public: /**原创 2021-07-19 20:31:33 · 135 阅读 · 0 评论 -
NC13 二叉树的最大深度
题目描述:求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。解题分析:使用递归,若node==NULL,则返回0,否则1 + max(maxDepth(root->left), maxDepth(root->right));/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution原创 2021-07-19 20:15:32 · 147 阅读 · 0 评论 -
NC109 岛屿数量
题目描述:给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。解题分析:使用dfs遍历即可。class Solution {public: /** * 判断岛屿数量 * @param grid char字符型vector<vector<>> * @return int整型 */ int so原创 2021-07-19 20:09:42 · 305 阅读 · 0 评论 -
NC54 数组中相加和为0的三元组
题目描述:给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。注意:三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)解集中不能包含重复的三元组。解题分析:(1)首先对数组进行排序(从小到大)(2)依次取出第 i 个数(i从0开始),并且不重复的选取(跳过重复的数)(3)这样问题就转换为 2 个数求和的问题(可以用双指针解决方法)***注意 2 个数求和时需要跳过重复的数,不然答案会有重复的。class Solution原创 2021-07-18 15:02:11 · 74 阅读 · 0 评论 -
NC38 螺旋矩阵
题目描述:给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。解题分析:采用模拟的方法,首先用left、top、right、bottom表示外面一圈的row、col的最小最大值,每次模拟一圈取值,然后left++、top++、right–、bottom++就表示往里一圈,然后继续模拟取值即可。需要注意的是这样每次模拟是至少是一个2*2的矩阵,所以需要考虑lefttop或者topbottom的情形。class Solution {public: vector<原创 2021-07-18 14:42:37 · 150 阅读 · 0 评论 -
NC52 括号序列
题目描述:给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。解题分析:使用栈模拟,遍历string:若栈为空,则将当前字符加入栈;若当前字符不能与栈中的首字符配对,则将当前字符加入栈;若当前字符能与栈中的首字符配对,则将栈中的首字符出栈;最后判断栈是否为空,为空的话则所有括号都是配对的,否则不是配对的。class Solu原创 2021-07-18 09:52:38 · 362 阅读 · 0 评论 -
NC95 数组中的最长连续子序列
题目描述:给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)解题分析:先排序,然后用变量currLength记录连续序列的长度:如果当前元素比前一个大1,说明他们可以构成连续的序列,currLength就加1。如果相等就跳过。否则就不能构成连续的序列,currLength要重置为1,要重新统计。class Solution {public: /** * max increasing subsequence原创 2021-07-17 15:25:25 · 529 阅读 · 0 评论 -
NC97 字符串出现次数的TopK问题
题目描述:给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数。返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。比如"ah1x"小于"ahb",“231”<”32“字符仅包含数字和字母解题分析:使用哈希表map统计各个字符串出现的次数,然后按要求排序即可。class Solution {public: /** *原创 2021-07-17 10:33:22 · 141 阅读 · 0 评论 -
NC32 求平方根
题目描述:实现函数 int sqrt(int x).计算并返回x的平方根(向下取整)解题分析:使用二分法,判断条件为mid * mid == x || ((mid * mid < x) && ((mid + 1) * (mid + 1) > x))class Solution {public: /** * * @param x int整型 * @return int整型 */ int sqrt(int x)原创 2021-07-15 22:31:32 · 164 阅读 · 0 评论 -
NC55 最长公共前缀
题目描述:编写一个函数来查找字符串数组中的最长公共前缀。解题分析:1对字符串排序 找出最大和最小字符串2用最小字符串和最大字符串挨个字符比对 找出公共子串排序是按字典序排序的,最短的在前,最长的在后,而且strs里面有重复的字符串也不怕。class Solution {public: /** * * @param strs string字符串vector * @return string字符串 */ string longestCom原创 2021-07-15 22:29:45 · 253 阅读 · 0 评论 -
NC53 删除链表的倒数第n个节点
题目描述:给定一个链表,删除链表的倒数第 nn 个节点并返回链表的头指针例如,给出的链表为: 1\to 2\to 3\to 4\to 51→2→3→4→5, n= 2n=2.删除了链表的倒数第 nn 个节点之后,链表变为1\to 2\to 3\to 51→2→3→5.解题分析:采用遍历的方法,先求出链表的长度nodeNums,然后求出倒数第n个节点的前1节点nodeNums-n-1,然后跳过下一节点即可。注意要判断一下nodeNums=n的情况。/** * struct ListNode原创 2021-07-14 20:35:16 · 61 阅读 · 0 评论 -
NC3 链表中环的入口结点
题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。解题分析:初始化:快指针fast指向头结点, 慢指针slow指向头结点让fast一次走两步, slow一次走一步,第一次相遇在C处,停止然后让fast指向头结点,slow原地不动,然后后fast,slow每次走一步,当再次相遇,就是入口结点。可参考:https://blog.nowcoder.net/n/9d3ffa4b004e43d1aff512141d0d7dac/*struct ListNode原创 2021-07-13 22:27:52 · 100 阅读 · 0 评论 -
NC156:数组中只出现一次的数(其它数出现k次)
题目描述:给定一个整型数组 arr和一个整数 k(k>1)。已知 arr 中只有 1 个数出现一次,其他的数都出现 k次。请返回只出现了 1 次的数。解题分析:若K为偶数,则可以直接将arr中所有元素异或,最后的结果便是答案。若K为奇数,则需要在每一位上进行相加操作,人后将每一位的值对K取余,那便是只出现一次的数了。class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 *原创 2021-07-10 10:26:01 · 179 阅读 · 0 评论 -
NC8 二叉树根节点到叶子节点和为指定值的路径
题目描述:给定一个二叉树和一个值\ sum sum,请找出所有的根节点到叶子节点的节点值之和等于\ sum sum 的路径,解题分析:采用递归的思想,依次累加,记录从根节点到叶子节点总和为sum的路径即可。/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * *原创 2021-07-09 21:02:38 · 110 阅读 · 0 评论 -
面试题 17.10. 主要元素
题目描述:数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-majority-element-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题分析:题目的难点在于时间复杂度为 O(N) 、空间复杂度为 O(1) 。通过两个变量elem原创 2021-07-09 20:02:23 · 57 阅读 · 0 评论 -
排序(插入,冒泡,快速,归并,堆)
https://blog.nowcoder.net/n/01ddf534c5e54ff894db524e972a9ebd原创 2021-07-06 21:19:54 · 60 阅读 · 0 评论 -
NC61 两数之和
题目描述:给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2解题分析:注意数组不是有序的,所有用双指针不太好。所以直接用map来做,key是target-当前值,value是当前值下标,所以如果某个值原创 2021-07-06 21:00:33 · 53 阅读 · 0 评论