- 博客(57)
- 资源 (2)
- 收藏
- 关注
原创 买卖股票的最佳时机 I II III IV动态规划 C++
优秀解答: https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/solution/yi-ge-tong-yong-fang-fa-tuan-mie-6-dao-gu-piao-wen/ 不可重复购买,非动态规划 ,维持两个变量,一个是之前的最小值(高买低卖),一个是得到的最大的返回值。 int maxProfi...
2019-12-09 13:37:24
414
原创 二叉树的前序 中序 后续 递归与非递归 C++
#include <iostream> #include<vector> #include<stack> #include<algorithm> #include<set> #include<set> #include<queue> #include<map> #include<unordered...
2019-12-05 19:51:44
231
原创 阿里云或者华为云装python3(记录一下 防止再踩坑)
sudo add-apt-repository ppa:jonathonf/python-3.6 sudo apt-get update sudo apt-get install python3.6 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1 sudo update-alterna...
2019-12-04 10:30:13
450
转载 [c++]--c++后台面试总结干货
转载来源 http://blog.youkuaiyun.com/shanghairuoxiao/article/details/72876248 C和C++语言基础 参考书籍:《C++ primer》,《effective C++》,《STL源码解析》,《深度搜索C++对象模型》 extern关键字作用 extern声明变量在在外部定义? extern修饰函数? extern C的作用?用法? static关...
2019-11-15 09:47:54
356
原创 654. 最大二叉树 C++
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树,并且输出这个树的根节点。 示例 : 输入:[3,2,1,6,0,5] 输出:返回下面这棵树的根节点: 6 / \ 3 5 \ / 2 ...
2019-10-16 19:30:29
297
原创 21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 简单题 注意 不修改 内存,只修改指针就行了。 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ...
2019-10-16 15:25:09
117
原创 23. 合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6 这种题目用堆来解决。堆的大小为数组链表的大小,当堆顶元素所在的那个链表到达顶端的时候,堆的大小进行缩小,知道堆为空。建立小堆顶,需要...
2019-10-16 15:03:57
132
原创 789. 逃脱阻碍者
在进行一个简化版的吃豆人游戏。你从 (0, 0) 点开始出发,你的目的地是 (target[0], target[1]) 。地图上有一些阻碍者,第 i 个阻碍者从 (ghosts[i][0], ghosts[i][1]) 出发。 每一回合,你和阻碍者们可以同时向东,西,南,北四个方向移动,每次可以移动到距离原位置1个单位的新位置。 如果你可以在任何阻碍者抓住你之前到达目的地(阻碍者可以采取任意行动...
2019-10-15 18:39:12
153
原创 1011. 在 D 天内送达包裹的能力 C++
传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。 传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。 返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。 示例 1: 输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5 输出:15 解释: 船舶最低...
2019-10-09 17:24:05
256
1
原创 846. 一手顺子 C++
爱丽丝有一手(hand)由整数数组给定的牌。 现在她想把牌重新排列成组,使得每个组的大小都是 W,且由 W 张连续的牌组成。 如果她可以完成分组就返回 true,否则返回 false。 这题用了 一map,map 排序字典,key 为数字,值为数字出现的次数,由于是排序的,只需要在字典中每W个遍历,出现一次value 就减少1,如果出现 不连续,那就输出false。 bool isNStr...
2019-10-09 15:56:50
255
原创 917. 仅仅反转字母 C++ 两种写法
给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。 双指针,一个从前往后记录位置,一个从后往前记录字母。 string reverseOnlyLetters(string S) { int i = 0, j = S.size() - 1; string new_string = ""; while (i < S.size()) ...
2019-10-09 10:25:10
559
原创 107. 二叉树的层次遍历 II 递归 与非递归
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 递归写法: vector<vector<int>> res; void dfs(TreeNode* root, int n) { if (root == NULL) return; else { if (n >= res.size()) {...
2019-10-06 21:37:37
176
原创 637. 二叉树的层平均值 C++
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 简单题 层次遍历 vector<double> averageOfLevels(TreeNode* root) { vector<double>res; if (root == NULL) return res; else { queue<TreeNode *>temp; te...
2019-10-06 20:39:43
397
2
原创 897. 递增顺序查找树 重新构建树与修改原树指针 C++
给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。 直接中序遍历构造一颗新树,这个最简单,注意找到第一个根节点就行了。 TreeNode* increasingBST(TreeNode* root) { if (root == nullptr) return nullptr; else { stack<TreeNo...
2019-10-06 19:44:20
210
原创 669. 修剪二叉搜索树 C++递归
给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。 递归写法,非递归暂时没写,当根节点的值小于L时,代表左子树所有节点的值,和根节点都需要舍去,同理当根节点的值大于R时,右子树所有节点的值和根节点的值都需要舍去。 TreeNode* tri...
2019-10-06 11:22:25
241
原创 965. 单值二叉树 C++ 递归与非递归
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。 bool isUnivalTree(TreeNode* root)//递归写法 { if (root == NULL) return 1; else { if (!root->left && !root->right) ...
2019-10-06 10:47:09
238
原创 559. N叉树的最大深度 C++ 递归 与非递归
一般看到树 ,就喜欢递归。 参考二叉树的最大深度。 int maxDepth(Node* root) { if (root == NULL) return 0; else { int Max = 0; for (auto i = 0; i < root->children.size(); i++) Max = max(Max, maxDepth(root...
2019-10-06 10:15:59
250
原创 108. 将有序数组转换为二叉搜索树 递归写法与非递归写法
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 这种题目一看 有序,自然反应就该是二分法。中间节点作为当前树的根节点,左边有序为左子树,右边有序为右子树,这样就能保证左子树右子树的节点个数基本一致,在重复构建左子树和右子树就行了 。Tips:一颗二叉搜索树的中序遍历一定是递增的。 Tr...
2019-10-05 20:47:04
334
原创 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 递归写法: TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { ...
2019-10-02 10:22:02
129
原创 96. 不同的二叉搜索树 C++代码
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ 3 2 1 1 3 2 ...
2019-09-29 09:41:06
238
原创 判断B是否是A的子树 用了递归加先序遍历的非递归
#include <iostream> #include<string> #include<vector> #include<algorithm> #include<stdlib.h> #include<unordered_map> #include<set> #include<stack> #in...
2019-09-24 14:20:00
220
原创 二叉树的先序遍历 中序遍历 后续遍历 递归与非递归
#include <iostream> #include<string> #include<vector> #include<algorithm> #include<stdlib.h> #include<unordered_map> #include<set> #include<stack> #i...
2019-09-24 10:20:41
149
原创 114. 二叉树展开为链表 C++
给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 看其他题解,说什么后续遍历,没怎么理解,一般做树这种东西,我都喜欢用递归。简单思路: 先把左子树搞成全部是右节点,再把右子树搞成全部是右节点,然后把左子树安到右子树,将左子树 搞成空的。 且每次返回都返回最后一个有叶子节点。 TreeNode* DFS(TreeNode* root)//返回排好的树的右节点 { if (root =...
2019-08-16 12:09:01
238
原创 257. 二叉树的所有路径 c++
给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 递归遍历,一个to_string(int )函数想了 好长时间,后来 发现 还是用string类自带的吧。 class Solution { public: vector<vector<int>> res; vector<int> temp; void S...
2019-08-15 22:30:45
287
原创 113. 路径总和 II C++ 递归
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 递归 要注意终止条件,以及 缓存数组中什么时候进入元素 和出元素。及到该节点的时候,该节点的数值进入数组,当左子树和右子树搜索完毕的时候,当前节点值出缓存数组。 class solution { vector&...
2019-08-15 22:04:32
230
原创 112. 路径总和 C++
定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。 递归。 bool hasPathSum(TreeNode* root, int su...
2019-08-15 21:09:17
233
原创 110. 平衡二叉树 C++递归
给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \...
2019-08-15 17:41:47
218
原创 637. 二叉树的层平均值 递归写法 c++
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / 9 20 / 15 7 输出: [3, 14.5, 11] 解释: 第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11]. class Solution { public: vector<pair<double,int>> ...
2019-08-15 16:31:57
263
原创 101. 对称二叉树 C++
Leetcode:https://leetcode-cn.com/classic/problems/symmetric-tree/description/ 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / 2 2 / \ / 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 ...
2019-08-15 10:55:46
233
原创 100. 相同的树 C++
给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入: 1 1 / \ / 2 3 2 3 [1,2,3], [1,2,3] 输出: true 示例 2: 输入: 1 1 / 2 ...
2019-08-14 23:06:33
283
原创 二叉树的最大深度 和 最小深度 递归写法(C++)
int maxDepth(TreeNode* root)//最大深度 { if (root == NULL) return 0; else return max(maxDepth(root->left), maxDepth(root->left)) + 1; } int minDepth(TreeNode* root)//最小深度,要考虑该节点是否为叶子节点 { if ...
2019-08-13 10:39:51
359
原创 98. 验证二叉搜索树(C++)中序遍历的递归与非递归解法
给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / 1 3 输出: true 示例 2: 输入: 5 / 1 4 / 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3...
2019-08-07 09:24:20
421
原创 22. 括号生成(C++)
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 n = 3,生成结果为: [ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ] 用了集合去重 和 DFS扩展。当 搜索到n时,遇到’(’ 之后在当前串插入一个"()“就是其中一个目标值,加上“()”+当前串、当前串加上”()" 就是所有可能值...
2019-08-05 18:34:04
483
原创 17. 电话号码的字母组合(C++)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 建立好对应关系,用DFS解决。DFS的结束条件是访问到最后一个电话号码,否则的话,要遍历当前号码中的每一个字符,插入一个字...
2019-08-05 16:38:30
927
原创 15. 三数之和(C++)
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 先排序加上遍历双指针,复杂度O(nlg...
2019-08-04 22:40:24
377
原创 16. 最接近的三数之和(C++)
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 排序后使用双指针,与三数之和类似,因为题目说只...
2019-08-04 22:34:05
336
原创 1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 来源:力扣(LeetC...
2019-08-04 18:23:27
131
原创 12. 整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12...
2019-08-03 19:28:02
211
原创 25. K 个一组翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例 : 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->...
2019-08-02 22:18:34
642
原创 24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 这题有个坑,要注意节点个数为单数!带头结点的链表有个小技巧不用对头结点进行特殊化处理,此时在头结点加入一个无意义的节点Head,返回时返回Head->next....
2019-08-02 21:36:37
90
20分钟 centos7 装Hyperdger Fabirc
2018-10-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅