数据结构与算法学习记录
目标成为slam大神
这个作者很懒,什么都没留下…
展开
-
进制转换---牛客
描述写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。数据范围:保证结果在 输入一个十六进制的数值字符串。输出该数值的十进制字符串。不同组的测试用例用\n隔开。stoi()将n进制数转换为10进制...原创 2022-06-26 16:09:04 · 152 阅读 · 0 评论 -
字符串分隔---华为机试
•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。连续输入字符串(每个字符串长度小于等于100)依次输出所有分割后的长度为8的新字符串解法1: 解法2...原创 2022-06-26 15:21:33 · 123 阅读 · 0 评论 -
明明的随机数---华为机试
明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。数据范围: 1原创 2022-06-26 11:36:42 · 255 阅读 · 0 评论 -
计算某字符出现次数---华为机试
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字符。输出输入字符串中含有该字符的个数。(不区分大小写字母)...原创 2022-06-26 10:46:06 · 79 阅读 · 0 评论 -
最后一个单词的长度---leetcode58题
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = "Hello World"输出:5解释:最后一个单词是“World”,长度为5。思路:从最后一个字母,反向遍历字符串,遇到第一个空格,返回遍历次数,就是最后一个单词的长度。题解1:核心代码模式题解2:ACM模式...原创 2022-06-26 10:04:50 · 159 阅读 · 0 评论 -
最后一块石头的重量Ⅱ---leetcode1049
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x原创 2022-06-23 17:46:37 · 127 阅读 · 0 评论 -
分割等和子集---leetcode416题
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元素和相等的子集.提示:这题的本质是一道01背包问题明确以下问题:1、背包的体积为sum/22、背包要放入的物品相当于集合中的元素,每个原创 2022-06-21 11:24:31 · 169 阅读 · 0 评论 -
不同的二叉搜索树---leetcode96
给你一个整数 ,求恰由 个节点组成且节点值从 到 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。输入:n = 3输出:5思路:1、确定dp数组及其下标含义dp[i] 表示从1到i互不相同的二叉搜索数有dp[i]种2、确定递归公式递推公式:dp[i] += dp[j - 1] * dp[i - j]; ,j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量3、dp初始化初始化dp[0] = 14、确定遍历顺序首先一定是遍历节点数,从递归公式:dp[i]原创 2022-06-20 09:32:24 · 241 阅读 · 0 评论 -
整数拆分---leetcode343题
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。示例 1:输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: n = 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 思路:1、确定dp数组及其下标含义dp[i] 表示拆分数字i可以得到的最大乘积为dp[i]2、确定递归公式从1遍历j,有两种渠道得到dp[i].一个是j * (i -原创 2022-06-20 09:05:27 · 69 阅读 · 0 评论 -
不同路径2---leetcode63题
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。思路:1、确定dp数组及下标含义:dp[i][j] 表示机器人到i,j点一共有dp[i][j]种方法2、确定递推公式 当i,j点没有障碍物时;dp[i][j] = dp[i - 1][j] + dp[i原创 2022-06-18 11:16:43 · 137 阅读 · 0 评论 -
不同路径---leetcode62题
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?1、确定dp数组及其下标含义dp[i][j]代表到底i,j有dp[i][j]种方法2、确定递推公式想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。所以:dp[i][j] = dp[i - 1][j] + dp[i][j - 1],3、原创 2022-06-18 10:51:37 · 97 阅读 · 0 评论 -
使用最小花费爬楼梯---leetcode746题
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 1:输入:cost = [10, 15, 20] 输出:15 解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。 示例 2:输入:cost = [1, 100,原创 2022-06-17 10:21:56 · 95 阅读 · 0 评论 -
爬楼梯---leetcode70题
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶这题和斐波那契数列是一样的解法1:动态规划解法2:维持2个变量...原创 2022-06-17 08:55:52 · 154 阅读 · 0 评论 -
509. 斐波那契数---leetcode
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n) 。解法1:解法2:只维持dp[n-1],dp[n-2]这两个数值就行解法3:递归...原创 2022-06-16 10:58:07 · 104 阅读 · 0 评论 -
从前序与中序遍历中构造二叉树---leetcode105题
给定两个整数数组preorder 和 inorder,其中preorder 是二叉树的先序遍历, inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(n...原创 2022-05-24 11:15:12 · 119 阅读 · 0 评论 -
从中序与后续遍历序列构造二叉树---leetcode106题
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗二叉树。解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(...原创 2022-05-24 10:58:53 · 97 阅读 · 0 评论 -
路径总和2---leetcode113题
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left.原创 2022-05-24 10:13:24 · 71 阅读 · 0 评论 -
路径总和---leetcode112题
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullp...原创 2022-05-24 08:55:06 · 131 阅读 · 0 评论 -
找树左下角的值---leetcode513题
解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(n...原创 2022-05-23 11:37:28 · 70 阅读 · 0 评论 -
左叶子之和---leetcode404题
解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(n...原创 2022-05-23 10:50:14 · 73 阅读 · 0 评论 -
二叉树的所有路径---leetcode257题
解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(n...原创 2022-05-23 10:20:11 · 58 阅读 · 0 评论 -
平衡二叉树---leetcode110题
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr)...原创 2022-05-24 08:40:03 · 66 阅读 · 0 评论 -
完全二叉树的节点个数---leetcode 222题
解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nu...原创 2022-05-21 10:17:47 · 59 阅读 · 0 评论 -
对称二叉树---leetcode 101题
解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nu...原创 2022-05-19 11:11:38 · 185 阅读 · 0 评论 -
N叉树的前序遍历---leetcode 589题
解法1:递归法/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _children) { val = _val; ch...原创 2022-05-19 09:30:45 · 136 阅读 · 0 评论 -
翻转二叉树---leetcode 226题
解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(n...原创 2022-05-18 11:06:52 · 56 阅读 · 0 评论 -
二叉树的最小深度---leetcode 111题
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr)...原创 2022-05-18 09:58:13 · 76 阅读 · 0 评论 -
二叉树的最大深度---leetcode 104题
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr)...原创 2022-05-18 09:32:37 · 46 阅读 · 0 评论 -
填充每个节点的下一个右侧节点指针 II---leetcode 117题
/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}...原创 2022-05-18 09:15:57 · 59 阅读 · 0 评论 -
填充每个节点的下一个右侧节点指针---leetcode 116题
/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {} ...原创 2022-05-18 08:50:20 · 74 阅读 · 0 评论 -
在每个树行中找最大值---leetcode 515题
使用max_element这个vector中的接口求其中元素的最大值。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : va...原创 2022-05-17 11:36:04 · 66 阅读 · 0 评论 -
N叉树的层序遍历---leetcode 429题
思想还是二叉树层序遍历的思想,只不过在后边输入每一子层元素时的操作是用for循环代替。/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _child...原创 2022-05-17 11:04:32 · 70 阅读 · 0 评论 -
二叉树的层平均值---leetcode 637题
在二叉树的层遍历的基础上,加入对每一层进行求和,取平均值的操作。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x)...原创 2022-05-17 10:49:46 · 56 阅读 · 0 评论 -
二叉树的右视图---leetcode 199题
对于二叉树的层序遍历,输出他的右视图,就相当于输出他的每一层遍历的最后一个元素。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x)...原创 2022-05-17 10:08:39 · 62 阅读 · 0 评论 -
二叉树的层序遍历Ⅱ---leetcode 107题
其实在层序遍历的基础上,反转一下最后的结果就可以/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(...原创 2022-05-17 09:50:32 · 82 阅读 · 0 评论 -
二叉树的层序遍历---leetcode 102题
解法:使用队列queue先进先出来实现二叉树的层序遍历。首先创建一个queue que;判断root是否为空,不为空,把root输入que;然后创建一个vector result储存最后输出的结果然后开始while循环,定义que的size,创建一个vector vec用来储存二叉树每一层for循环开始遍历二叉树每一层,定义一个node指向que第一个值,然后pop(),然后将其输入vec,然后将左右子节点输入que;第一层遍历结束将vec输入result;继续whil...原创 2022-05-17 09:36:14 · 63 阅读 · 0 评论 -
二叉树的后续遍历---leetcode 145题
解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(n...原创 2022-05-16 10:59:54 · 47 阅读 · 0 评论 -
二叉树的中序遍历---leetcode 94题
解法1:递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(n...原创 2022-05-16 10:46:26 · 222 阅读 · 0 评论 -
二叉树前序遍历---leetcode 144题
解法1:递归法:递归函数写法三要素:1、确定递归函数的参数和返回值;2、确定递归的终止条件;3、确定单层递归的逻辑。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr)...原创 2022-05-16 10:29:32 · 60 阅读 · 0 评论 -
前k个高频元素---leetcode 347题
解法1:思路:一共要解决3个问题:统计每个元素出现的次数;按照元素出现的次数高低进行排序;输出前k个出现次数最高的元素组成的数组。第一个问题,可以用map来解决。创建一个容器map,遍历nums,map的first储存元素,second储存元素次数。第二个问题,用优先队列来解决。创建一个队列q,对q的要求:内部储存pair类型;是一个小顶堆,也就是优先输出最小值;写一个仿函数定义比较方式,通过比较pair的second来排序。然后开始遍历map,最后输出的q中就是含有k个元素的小顶堆。...原创 2022-05-12 09:29:50 · 84 阅读 · 0 评论