
C++Prictice
binarySearchTrees
这个作者很懒,什么都没留下…
展开
-
算法与分析课程_动态规划算法_拼题网_习题2_0-1背包_C++
2 0-1背包给定n(n<=100)种物品和一个背包。物品i的重量是wi,价值为vi,背包的容量为C(C<=1000)。问:应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有两个选择:装入或不装入。不能将物品i装入多次,也不能只装入部分物品i。输入格式:共有n+1行输入: 第一行为n值和c值,表示n件物品和背包容量c; 接下来的n行,每行有两个数据,分别表示第i(1≤i≤n)件物品的重量和价值。输出格式:输出装入背包中物品的最大总价值原创 2020-12-12 20:17:20 · 488 阅读 · 0 评论 -
算法与分析课程_动态规划算法_拼题网_习题1_最大子段和_C++
1 最大子段和给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。要求算法的时间复杂度为O(n)。输入格式:输入有两行:第一行是n值(1<=n<=10000);第二行是n个整数。输出格式:输出最大子段和。输入样例:在这里给出一组输入。例如:6-2 11 -4 13 -5 -2输出样例:在这里给出相应的输出。例如:2代码:ma原创 2020-12-12 10:59:56 · 633 阅读 · 0 评论 -
算法与分析课程_回溯算法_拼题网_习题6_工作分配问题_C++
6 工作分配问题设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。输入格式:输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。输出格式:将计算出的最小总费用输出到屏幕。输入样例:在这里给出一组输入。例如:310 2 32 3 43 4 5输出样例:在这里给出相应的输出。例如:9代码:#include<iostre原创 2020-12-12 10:53:28 · 281 阅读 · 0 评论 -
算法与分析课程_回溯算法_拼题网_习题5_666_C++
5 666小明有一张m*n的好习惯记录卡,记录每一天的好习惯目标达成度(数字0-9表示)。某天目标完成达成,就在当天的格子里写上数字6,目标没有完全达成就写上一个小于6的数字(0-5),目标超额完成就写上一个大于6的数字(7-9)。记录卡上如果能找到一条长度为3的路径并且路径上的三个数字都大于等于6(这里的路径是指从某个格子出发,可以向左、右、上、下格子移动,并且不能重复经过一个格子),则小明就能得到一个“666”奖励。请你帮小明统计下他总共能得到多少“666”奖励。输入格式:输入第一行给出两个正整原创 2020-12-12 10:50:13 · 401 阅读 · 0 评论 -
算法与分析课程_回溯算法_拼题网_习题4_整数拆分_C++
4 整数拆分将一个正整数拆分成若干个正整数的和。输入格式:一个正整数n输出格式:若干行,每行一个等式(每个数或者等号间都有一个空格,第一个数前没有空格,最后一个数后面没有空格,数与数之间要求非降序排列)。最后一行给出解的总个数输入样例:在这里给出一组输入。例如:4输出样例:在这里给出相应的输出。例如:4 = 1 + 1 + 1 + 14 = 1 + 1 + 24 = 1 + 34 = 2 + 24代码:#include<iostream>#includ原创 2020-12-12 10:45:22 · 391 阅读 · 1 评论 -
算法与分析课程_回溯算法_拼题网_习题2_N皇后_C++
2 八皇后问题在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上。例如:现在我们把棋盘扩展到 n×n 的棋盘上摆放 n 个皇后,请问该怎么摆?请编写程序,输入正整数 n,输出全部摆法(棋盘格子空白处显示句点“.”,皇后处显示字母“Q”,每两个字符之间空一格)。输入格式正整数 n(n>0)输出格式若问题有解,原创 2020-12-12 10:41:22 · 926 阅读 · 0 评论 -
算法与分析课程_回溯算法_拼题网_习题1_最佳调度问题_C++
1 最佳调度问题假设有n(n<=20)个任务由k(k<=20)个可并行工作的机器完成。完成任务i需要的时间为ti。 试设计一个算法,对任意给定的整数n和k,以及完成任务i 需要的时间为ti ,i=1~n。计算完成这n个任务的最佳调度,使得完成全部任务的时间最早。输入格式:输入数据的第一行有2 个正整数n和k。第2 行的n个正整数是完成n个任务需要的时间。输出格式:将计算出的完成全部任务的最早时间输出到屏幕。输入样例:在这里给出一组输入。例如:7 32 14 4 16 6 5原创 2020-12-01 21:45:05 · 443 阅读 · 0 评论 -
C++每日一练26-四数相加 II
四数相加 II给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。例如:输入: A = [ 1, 2] B = [-2,-1] C = [-1, 2] D = [ 0, 2]输出: 2解释:原创 2020-11-27 22:33:11 · 464 阅读 · 1 评论 -
C++每日一练25-上升下降字符串
上升下降字符串给你一个字符串 s ,请你根据下面的算法重新构造字符串:1.从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。2.从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。3.重复步骤 2 ,直到你没法从 s 中选择字符。4.从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。5.从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。6.重复步骤 5 ,直到你没法从 s 中选择字符原创 2020-11-25 19:28:59 · 206 阅读 · 0 评论 -
C++每日一练24-移动零
移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes整体思路:利用stable_partition对指定区域内的数据按照特定条件进行分组代码:class Solution {public: void moveZeroes(vector&原创 2020-11-20 19:28:54 · 130 阅读 · 0 评论 -
C++每日一练23-加油站
加油站在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/probl原创 2020-11-18 21:02:29 · 339 阅读 · 0 评论 -
C++每日一练22-距离顺序排列矩阵单元格
距离顺序排列矩阵单元格给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2)之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序返回答案。)来源:力扣(Le原创 2020-11-18 20:57:04 · 232 阅读 · 0 评论 -
C++每日一练21-删除链表的倒数第N个节点
删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list整体思路:用堆栈储存节点,弹出倒数n个元素,找出倒数第n+1个元素,原创 2020-11-16 18:57:07 · 252 阅读 · 0 评论 -
C++每日一练20-数组的相对排序
数组的相对排序给你两个数组,arr1 和 arr2arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。示例:输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19]来源:力扣(LeetCode)链接:ht原创 2020-11-14 11:25:52 · 393 阅读 · 0 评论 -
C++每日一练19-按奇偶排序数组 II
按奇偶排序数组 II给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。示例:输入:[4,2,5,7]输出:[4,5,2,7]解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort-array-by-p原创 2020-11-12 19:56:25 · 509 阅读 · 0 评论 -
C++每日一练18-买卖股票的最佳时机 II
买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4] 输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第原创 2020-11-08 17:37:45 · 144 阅读 · 0 评论 -
C++每日一练17-根据数字二进制下 1 的数目排序
给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。示例 1:输入:arr = [0,1,2,3,4,5,6,7,8]输出:[0,1,2,4,8,3,5,6,7]解释:[0] 是唯一一个有 0 个 1 的数。 [1,2,4,8] 都有 1 个 1 。 [3,5,6] 有 2 个 1 。 [7] 有 3 个 1 。 按照 1 的个数排序得到的结果数组为 [0,1原创 2020-11-06 21:00:52 · 232 阅读 · 0 评论 -
C++每日一练16-插入区间
插入区间给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。整体思路:遍历每一个区间,满足条件的小区间的左边界作为插入后区间的左边界,然后判断插入区间的右边界将置为何值。利用穷举法,将会出现的各种情况都做出解决。代码很乱,而且用了非常多的选择语句,就是对应着每一种会出现的情况所设置.代码:class Solution {public: vector<vector<int&g原创 2020-11-04 16:53:11 · 292 阅读 · 0 评论 -
C++每日一练15-两个数组的交集
两个数组的交集给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/intersection-of-two-arrays整体思路:建立两个哈希表,一个作为查询表,一个作为需要查询的表(该表会消除原创 2020-11-02 19:19:49 · 373 阅读 · 0 评论 -
C++每日一练14-宝石与石头
宝石与石头给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = “aA”, S = “aAAbbbb”输出: 3示例 2:输入: J = “z”, S = “ZZ”输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/p原创 2020-11-01 22:30:15 · 333 阅读 · 0 评论 -
C++每日一练13-岛屿的周长
岛屿的周长给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/isl原创 2020-10-30 18:48:35 · 224 阅读 · 0 评论 -
C++每日一练12-求根到叶子节点数字之和
求根到叶子节点数字之和给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers示例 1:示例 2:整体思路:dfs+递归遍历每一个叶节点(类似前序遍原创 2020-10-29 22:28:13 · 194 阅读 · 0 评论 -
C++每日一练11-独一无二的出现次数
独一无二的出现次数给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-number-of-occurrences/整体思路:哈希表(unordered_map)+容器(vector)(1)遍历arr,把元素和元素出现次数加入哈希表(unordered_map)中(2)遍历unordered_m原创 2020-10-28 22:09:15 · 363 阅读 · 0 评论 -
C++每日一练10-解数独
编写一个程序,通过填充空格来解决数独问题。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sudoku-solver一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。一个数独。暴力解法代码:class Solution {public: bool flag; bool is原创 2020-10-26 22:08:23 · 266 阅读 · 0 评论 -
C++每日一练9-回文链表
回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2 输出: false示例 2:输入: 1->2->2->1 输出: true来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-linked-list栈:开销较大(1)遍历链表,记录链表长度(2)将链表前1/2长度的元素入栈(3)将链表后1/2的元素按顺序与堆栈作比较,相同则弹出栈顶元素(4)如果堆栈为空或者到达链表原创 2020-10-23 15:50:14 · 142 阅读 · 0 评论 -
C++每日一练8-二叉树的层序遍历
23号再发。。。原创 2020-10-23 15:36:07 · 117 阅读 · 0 评论 -
C++每日一练7-长按键入
长按键入你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/long-pressed-name示例 1:输入:name = “alex”, typed = “aaleex”输出:true解释:‘alex’原创 2020-10-21 21:54:42 · 268 阅读 · 0 评论 -
C++每日一练6-重排链表
重排链表给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.来源:力扣(LeetCode)链接:htt原创 2020-10-20 11:14:44 · 288 阅读 · 0 评论 -
C++每日一练5-二叉树的前序遍历
二叉树的前序遍历给定一个二叉树,返回它的前序 遍历。示例:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/递归:代码:class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> ret; preord原创 2020-10-19 19:56:55 · 141 阅读 · 0 评论 -
C++每日一练4-二叉树的中序遍历
二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例:来源:力扣(LeetCode)链接:hhttps://leetcode-cn.com/problems/binary-tree-inorder-traversal/递归:整体思路:利用递归和回溯,深度优先(1)从根节点开始遍历整根树(2)如果存在左分支结点,父节点向左移动(3)无左分支节点,输出父节点(4)如果存在右分支结点,父节点向右移动(5)重复2代码:/** * Definition for a binary t原创 2020-10-18 22:28:44 · 114 阅读 · 0 评论 -
C++每日一练3-二叉树的后序遍历
二叉树的后序遍历给定一个二叉树,返回它的 后序 遍历。示例:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/递归:整体思路:利用递归和回溯,深度优先(1)从根节点开始遍历整根树(2)如果存在左分支结点,根节点向左移动(3)如果存在右分支结点,根节点向右移动(4)到达叶子节点,输出叶子节点,回溯到上一个根节点代码:class Solution {public:原创 2020-10-17 13:06:42 · 184 阅读 · 0 评论 -
C++每日一练2-分割链表
分割链表编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/partition-list-lcci示例:输入: head = 3->5->8->5->10->2->1, > x =原创 2020-10-08 15:46:14 · 267 阅读 · 0 评论 -
C++每日一练1-两数相加
两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://l原创 2020-10-07 10:04:59 · 282 阅读 · 0 评论