![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣
阳光开朗男孩
躺平才是王道
展开
-
C++提取以逗号分隔的字符串
C++提取以逗号分隔的字符串原创 2023-01-13 19:40:17 · 706 阅读 · 0 评论 -
买卖股票的最佳时机 II
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 =原创 2020-12-16 17:34:33 · 170 阅读 · 1 评论 -
买卖股票的最佳时机
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意:利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:输原创 2020-12-16 17:10:06 · 123 阅读 · 0 评论 -
杨辉三角 II
题目给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:解题思路class Solution {public: vector<int> getRow(int rowIndex) { vector<int> kRows(rowIndex+1);//第K行的vector大小为 rowIndex+1 for(int i = 0; i <=原创 2020-12-14 19:04:25 · 107 阅读 · 0 评论 -
杨辉三角
题目给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:方法一:数学杨辉三角,是二项式系数在三角形中的一种几何排列。它是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。杨辉三角具有以下性质:每行数字左右对称,由 1 开始逐渐变大再变小,并最终回到 1。第 n 行(从 00 开始编号)的数字有 n+1 项,前 n 行共有 n(n+1原创 2020-12-14 16:30:57 · 319 阅读 · 0 评论 -
路径总和
题目给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。方法一:广度优先搜索首先我们可以想到使用广度优先搜索的方式,记录从根节点到当前节点的路径和,以防止重复计算。这样我们使用两个队列,分别存储将要遍历的节点,以及根节点到这些节点的路径和即原创 2020-10-31 00:25:57 · 107 阅读 · 0 评论 -
二叉树的最小深度
题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。输入:root = [3, 9, 20, null, null, 15, 7]输出:2示例2:输入:root = [2, null, 3, null, 4, null, 5, null, 6]输出:5提示:树中节点数的范围在 [0, 105] 内-1000 <= Node.val <= 1000方法一:深度优先搜索首先可以想到使用深度优先搜索原创 2020-10-24 12:28:03 · 334 阅读 · 0 评论 -
平衡二叉树
题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。输入:root = [3, 9, 20, null, null, 15, 7]输出:true输入:root = [1, 2, 2, 3, 3, null, null, 4, 4]输出:false示例3:输入:root = [ ]输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val &l原创 2020-10-24 12:14:24 · 1011 阅读 · 0 评论 -
将有序数组转换为二叉搜索树
题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:前言二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排序的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。给定二叉搜索树的中序遍历,是否可以唯一地确定二叉搜索树?答案是否定的。原创 2020-10-20 22:19:31 · 364 阅读 · 0 评论 -
二叉树的层次遍历II
题目给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],返回其自底向上的层次遍历为:广度优先搜索树的层次遍历可以使用广度优先搜索实现。从根节点开始搜索,每次遍历同一层的全部节点,使用一个列表存储该层的节点值。如果要求从上到下输出每一层的节点值,做法是很直观的,在遍历完一层节点之后,将存储该层节点值的列表添加到结果列表的尾部。这道题要求从下到上输出每一层的节点值,只要对上原创 2020-10-09 23:02:31 · 225 阅读 · 0 评论 -
二叉树的最大深度
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3, 9, 20, null, null, 15, 7],返回它的最大深度 3 。递归如果我们知道了左子树和右子树的最大深度 ll 和 rr,那么该二叉树的最大深度即为max(l, r) + 1而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O原创 2020-10-09 22:48:51 · 1177 阅读 · 0 评论 -
对称二叉树
题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:递归如果一个树的左子树与右子树镜像对称,那么这个树是对称的。因此,该问题可以转化为:两个树在什么情况下互为镜像?如果同时满足下面的条件,两个树互为镜像:它们的两个根结点具有相同的值每个树的右子树都与另一个树的左子树镜像对称我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,pp 指针原创 2020-10-09 20:29:23 · 303 阅读 · 0 评论 -
相同的树
题目给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:1 1/ \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入:1 1/ 2 2 [1,2], [1,null,2]输出: false示例 3:输入:1 1/原创 2020-10-09 19:52:07 · 408 阅读 · 0 评论 -
合并两个有序数组
题目给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]解题思路一个是从后往前确定原创 2020-10-04 11:11:32 · 167 阅读 · 0 评论 -
删除排除链表中的重复元素
题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3思路这题主要考察的是链表的删除操作。因为所给链表是有序的,我们可以从当前节点开始和下一个节点比较,如果两个节点值相同,则删除后一个节点,一直到两个节点值不相同,此时我们将指针指向后一个节点,再进行上述操作,一直到遍历结束。/** * Definition原创 2020-10-04 11:00:59 · 98 阅读 · 0 评论 -
爬楼梯
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶动态规划我们用 f(x) 表示爬到第 x 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台原创 2020-10-03 12:28:57 · 307 阅读 · 0 评论 -
x的平方根
题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。袖珍计算器算法「袖珍计算器算法」是一种用指数函数 exp 和对数函数 ln 代替平方根函数的方法。我们通过有限的可以使用的数学函数,得到我们想要计算的结果。...原创 2020-10-03 10:21:42 · 1584 阅读 · 1 评论 -
二进制求和
题目给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”提示:每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。1 <= a.length, b.length <= 10^4字符串如果不是 “0” ,就都不含前导零。模拟我们可以借鉴「列竖式」的方法,末尾对齐,逐位相加。在十进原创 2020-09-24 21:29:30 · 202 阅读 · 0 评论 -
加一
题目给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。class Solution{public: vector<int> plusOne(vecto原创 2020-09-24 20:31:53 · 91 阅读 · 0 评论 -
转置矩阵
题目给定一个矩阵 A, 返回 A 的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:[[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]提示:1 <= A.length <= 10001 <= A[0].length <= 1000算法1)获取原数组行列2)新建数组,行即原创 2020-09-23 21:07:20 · 173 阅读 · 0 评论 -
搜索插入位置
题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0二分查找思路与算法假设题意是叫你在排序数组中寻找是否存在一个目标值,那么训练有素的读者肯定立马就能想到利用二分法在 O(原创 2020-09-22 17:25:40 · 164 阅读 · 0 评论 -
移除元素
题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,2,2,3,0,4,2原创 2020-09-22 14:07:16 · 136 阅读 · 0 评论 -
删除排序数组中的重复项
题目给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums原创 2020-09-21 23:04:09 · 91 阅读 · 0 评论 -
合并两个有序链表
题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4递归思路我们可以如下递归地定义两个链表里的 merge 操作(忽略边界情况,比如空链表等):list1[0] + merge(list1[1:],list2) list1[0] < list2[0]list2[0] + merge(list原创 2020-09-19 10:42:10 · 164 阅读 · 0 评论 -
有效的括号
题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true栈判断括号的有效性可以原创 2020-09-19 10:04:36 · 117 阅读 · 0 评论 -
最长公共前缀
题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。横向扫描用LCP(S1…Sn) 表示字符串S1…Sn的最长公共前缀。可以得到以下结论:LCP(S1…Sn)=LCP(LCP(LCP(S1,S2),S3),…Sn)原创 2020-09-17 23:18:14 · 492 阅读 · 0 评论 -
罗马数字转整数
题目罗马数字包含以下七种字符: 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 。原创 2020-09-08 19:41:41 · 108 阅读 · 0 评论 -
回文数
题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶: 你能不将整数转为字符串来解决这个问题吗?思路反转一半数字第一个想法:将数字转换为字符串,并检查字符串是否为回原创 2020-09-07 23:33:39 · 307 阅读 · 0 评论 -
整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。class Solution {public:int reverse(int x){long int res = 0;while(x !原创 2020-08-19 23:09:20 · 77 阅读 · 0 评论