C/C++
C/C++
BreezeChasingDrizzle
Laugh when you're happy, and laugh later when you're unhappy!
展开
-
根据无序vector构建二叉搜索树
【代码】根据无序vector构建二叉搜索树。原创 2024-04-24 23:07:17 · 153 阅读 · 0 评论 -
斐波那契数列
【代码】斐波那契数列。原创 2024-02-28 10:31:42 · 364 阅读 · 0 评论 -
C++中string对象之间比较、char*之间比较
【代码】C++中string对象之间比较、char*之间比较。原创 2023-09-17 19:49:57 · 397 阅读 · 0 评论 -
在一定的时间内安排活动
活动安排假设有n个活动的集合E={a1,a2,…,an},其每个活动都要求使用同一资源(如某个设备、教室、场地等),而在同一时间内只允许一个活动使用这一资源。每个活动都有一个要求使用该资源的起止时间si,fi,且si<fi。如果选择了活动ai,则它在半开的时间区间[si,fi)内占有资源。两个活动ai,aj称为是相容的,当且仅当它们的时间区间[si,fi)和[sj,fj)不相交,即si>=fj 或 sj >=fi。现要求在所给定的活动集中选出最大的相容活动子集。(提示:贪心策略)主函原创 2020-06-12 22:10:16 · 19 阅读 · 0 评论 -
排序桶中的有色石头
排序桶中的有色石头设有顺序放置的n个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红,白,蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后,重新安排时对每粒砾石的颜色只能看一次,并且只允许交换操作来调整砾石的位置。提示:利用快速排序思想解决。由于要求“对每粒砾石的颜色只能看一次”,设3个指针i,j和k,若将j看作工作指针,将r[1…j-1]作为红色,r[j…k-1]为白色,r[k…n]为兰色。从j=1开始查看,若r[j]为白色,则j=j+1;若r[j]为红色,则交换r原创 2020-05-30 10:32:33 · 39 阅读 · 0 评论 -
快速排序.
快速排序这是在博客园上看的一个博主写的,用的python,感觉写的不错,以秘密的形式发表,供以后回顾用,绝没有半点盗窃之意 #快速排序 传入列表、开始位置和结束位置 2 def quick_sort( li , start , end ): 3 # 如果start和end碰头了,说明要我排的这个子数列就剩下一个数了,就不用排序了 4 if not start < end : 5 return 6 7 mid = li[start] #拿出第一个原创 2020-06-01 21:40:43 · 26 阅读 · 0 评论 -
按目录缩进的形式输出一棵二叉树,同时要输出目录的层次。
按目录缩进的形式输出一棵二叉树,同时要输出目录的层次。假设二叉树的数据元素为字符,采用二叉链式存储结构。二叉树ADT实现的大部分代码已经给出,其中二叉树采用完全前序序列创建。请补充一个二叉树的输出函数,要求按目录缩进的形式输出一棵二叉树,同时要输出目录的层次。层次占2位、元素占1位,间隔4个位置(即共占7个位置)。 注意:答案区只写指定补充的函数代码,其他给定的代码不允许重写、修改和提交!例如:有如右图的二叉树 输入:ABD@@E@@C@F@@输出:1A 2B原创 2020-05-30 10:33:17 · 58 阅读 · 0 评论 -
实现二叉树的基本操作:建立、遍历、计算深度、结点数、叶子数等
树的相关操作#include <iostream>using namespace std;int LeavesNumber=0;int NodeNumber=0;int SpecificNodeNumber=0;typedef struct Node{ struct Node *left; struct Node *right; char ...原创 2020-05-06 20:50:14 · 316 阅读 · 0 评论 -
图的基本操作:以矩阵和邻接表的形式创建图、DFS遍历图、BFS遍历图、插入边、删除边和找最短路径等
图的基本操作#include <iostream>#include <bits/stdc++.h>#include<malloc.h>using namespace std;#define DataMaxNumber 100/*************************************************************...原创 2020-05-07 14:52:38 · 348 阅读 · 0 评论 -
假设无向、非加权图的数据元素为字符,采用邻接表存储结构。图的创建、存储结构输出等大部分操作的实现代码操作已经给出,请分别补充写出操作插入边、删除边的实现函数代码。
标题假设无向、非加权图的数据元素为字符,采用邻接表存储结构。图的创建、存储结构输出等大部分操作的实现代码操作已经给出,请分别补充写出操作插入边、删除边的实现函数代码。有关说明:(1)插入边, int Insert_Edge(g,vi,vj) 输入:图g,要插入边的两个顶点元素vi,vj; 输出:返回插入的状态(成功、错误:边顶点不存在、错误:边重复),根据不同的状态会输出:原创 2020-06-13 22:55:13 · 214 阅读 · 0 评论 -
线性表ADT实现-插入、删除和反转
线性表ADT实现假设线性表ADT的数据元素类型为正整数,采用带头结点的单链式存储结构。线性表ADT实现的大部分代码已经给出,请补充写出类的两个成员函数insert和reverse。 注意:只需提交需要补充的函数代码,其他代码不能自己重写和修改。insert函数:在元素值从小到大有序的线性表中插入一个元素,仍然保持有序。reverse函数:实现线性表元素的倒置,即将线性表中数据元素的顺序反转。线性表元素输入时,以 endTag 作为结束标志。例如输入: 3 8 7 2 4 9 1 6 5 0则原创 2020-06-14 09:14:21 · 195 阅读 · 0 评论 -
稀疏矩阵压缩存储
稀疏矩阵压缩存储#include <iostream>#include<cstdlib>using namespace std;struct Trituple//三元组{ int row,col,value;//非零元素的行号、列号和它的值 Trituple &operator = (Trituple &x)//重写函数“=” { row = x.row; col = x.col;原创 2020-06-14 19:14:35 · 44 阅读 · 0 评论 -
范围查询.
范围查询描述数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数。输入第一行包括两个整数:点的总数n,查询的次数m。第二行包含n个数,为各个点的坐标。以下m行,各包含两个整数:查询区间的左、右边界a和b。输出对每次查询,输出落在闭区间[a, b]内点的个数。样例Input5 21 3 7 9 114 67 12Output03限制0 ≤ n, m ≤ 5×105对于每次查询的区间[a, b],都有a ≤ b各点的坐标互异各点的坐标、查询区间的边原创 2020-06-23 11:10:49 · 85 阅读 · 0 评论 -
祖玛问题.
祖玛问题描述祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。开发商最近准备为玩家写一个游戏过程的回放工具。他们已经在游戏内完成了过程记录的功能,而回放功能的实现则委托你来完成。游戏过程的记录中,首先是轨道上初始的珠子序列,然后是玩家接下来所做的一系列操作。你的任务是,在各次操作之后原创 2020-06-23 11:13:07 · 115 阅读 · 0 评论 -
.灯塔问题
灯塔问题描述海上有许多灯塔,为过路船只照明。每个灯塔都配有一盏探照灯,照亮其东北、西南两个对顶的直角区域。探照灯的功率之大,足以覆盖任何距离。灯塔本身是如此之小,可以假定它们不会彼此遮挡。若灯塔A、B均在对方的照亮范围内,则称它们能够照亮彼此。现在,对于任何一组给定的灯塔,请计算出其中有多少对灯塔能够照亮彼此。输入共n+1行。第1行为1个整数n,表示灯塔的总数。第2到n+1行每行包含2个整数x, y,分别表示各灯塔的横、纵坐标。输出1个整数,表示可照亮彼此的灯塔对的数量。样例Inp原创 2020-06-23 11:16:34 · 215 阅读 · 0 评论 -
列车调度问题
列车调度问题描述某列车调度站的铁道联接结构如Figure 1所示。其中,A为入口,B为出口,S为中转盲端。所有铁道均为单轨单向式:列车行驶的方向只能是从A到S,再从S到B;另外,不允许超车。因为车厢可在S中驻留,所以它们从B端驶出的次序,可能与从A端驶入的次序不同。不过S的容量有限,同时驻留的车厢不得超过m节。设某列车由编号依次为{1, 2, …, n}的n节车厢组成。调度员希望知道,按照以上交通规则,这些车厢能否以{a1, a2, …, an}的次序,重新排列后从B端驶出。如果可行,应该以怎样的原创 2020-06-28 16:12:44 · 253 阅读 · 0 评论 -
真二叉树遍历
真二叉树一般来说,给定二叉树的先序遍历序列和后序遍历序列,并不能确定唯一确定该二叉树。但是对于“真二叉树”(每个内部节点都有两个孩子的二叉树),给定它的先序、后序遍历序列足以完全确定它的结构。将二叉树的n个节点用[1, n]内的整数进行编号,输入一棵真二叉树的先序、后序遍历序列,请输出它的中序遍历序列。输入第一行为一个整数n,即二叉树中节点的个数。第二、三行为已知的先序、后序遍历序列。输出仅一行,给定真二叉树的中序遍历序列。样例Input51 2 4 5 34 5 2 3 1O原创 2020-06-28 16:17:58 · 31 阅读 · 0 评论 -
无线广播问题
无线广播问题描述某广播公司要在一个地区架设无线广播发射装置。该地区共有n个小镇,每个小镇都要安装一台发射机并播放各自的节目。不过,该公司只获得了FM104.2和FM98.6两个波段的授权,而使用同一波段的发射机会互相干扰。已知每台发射机的信号覆盖范围是以它为圆心,20km为半径的圆形区域,因此,如果距离小于20km的两个小镇使用同样的波段,那么它们就会由于波段干扰而无法正常收听节目。现在给出这些距离小于20km的小镇列表,试判断该公司能否使得整个地区的居民正常听到广播节目。输入第一行为两个整数n,原创 2020-06-28 16:29:02 · 29 阅读 · 0 评论 -
任务调度问题
任务调度问题描述某高性能计算集群(HPC cluster)采用的任务调度器与众不同。为简化起见,假定该集群不支持多任务同时执行,故同一时刻只有单个任务处于执行状态。初始状态下,每个任务都由称作优先级数的一个整数指定优先级,该数值越小优先级越高;若优先级数相等,则任务名ASCII字典顺序低者优先。此后,CPU等资源总是被优先级数最小的任务占用;每一任务计算完毕,再选取优先级数最小下一任务。不过,这里的任务在计算结束后通常并不立即退出,而是将优先级数加倍(加倍计算所需的时间可以忽略)并继续参与调度;只有在优原创 2020-06-28 16:42:23 · 130 阅读 · 0 评论 -
循环移位问题
循环移位问题描述所谓循环移位是指。一个字符串的首字母移到末尾, 其他字符的次序保持不变。比如ABCD经过一次循环移位后变成BCDA给定两个字符串,判断它们是不是可以通过若干次循环移位得到彼此输入由m行组成,每行包含两个由大写字母’A’~'Z’组成的字符串,中间由空格隔开输出对于每行输入,输出这两个字符串是否可以通过循环移位得到彼此:YES表示是,NO表示否样例InputAACD CDAAABCDEFG EFGABCDABCD ACBDABCDEFEG ABCDEEOutput原创 2020-06-28 16:45:01 · 75 阅读 · 0 评论 -
玩具问题-状态转换图及其搜索
玩具问题描述ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具。该玩具酷似魔方,又不是魔方。具体来说,它不是一个3 * 3 * 3的结构,而是4 * 2的结构。按照该玩具约定的玩法,我们可反复地以如下三种方式对其做变换:A. 交换上下两行。比如,图(a)经此变换后结果如图(b)所示。B. 循环右移(ZC神从小就懂得这是什么意思的)。比如,图(b)经此变换后结果如图©所示。C. 中心顺时针旋转。比如,图©经此变换后结果如图(d)所示。ZC神自小就是这方面的天才,他往往是一只手还没揩原创 2020-06-28 16:45:54 · 73 阅读 · 0 评论 -
旅行商问题
旅行商问题描述Shrek是一个大山里的邮递员,每天负责给所在地区的n个村庄派发信件。但杯具的是,由于道路狭窄,年久失修,村庄间的道路都只能单向通过,甚至有些村庄无法从任意一个村庄到达。这样我们只能希望尽可能多的村庄可以收到投递的信件。Shrek希望知道如何选定一个村庄A作为起点(我们将他空投到该村庄),依次经过尽可能多的村庄,路途中的每个村庄都经过仅一次,最终到达终点村庄B,完成整个送信过程。这个任务交给你来完成。输入第一行包括两个整数n,m,分别表示村庄的个数以及可以通行的道路的数目。以下共m原创 2020-06-28 16:47:14 · 93 阅读 · 0 评论 -
重名剔除问题
重名剔除问题描述Epicure先生正在编撰一本美食百科全书。为此,他已从众多的同好者那里搜集到了一份冗长的美食提名清单。既然源自多人之手,其中自然不乏重复的提名,故必须予以筛除。Epicure先生因此登门求助,并认定此事对你而言不过是“一碟小菜”,相信你不会错过在美食界扬名立万的这一良机输入第1行为1个整数n,表示提名清单的长度。以下n行各为一项提名输出所有出现重复的提名(多次重复的仅输出一次),且以其在原清单中首次出现重复(即第二次出现)的位置为序样例见英文题面限制1 < n &原创 2020-06-28 16:46:37 · 80 阅读 · 0 评论 -
对引用的深入理解
对引用的深入理解引用的本质可以理解为所引用对象的地址 通过下面反汇编 的代码理解一下:#include <iostream>using namespace std;int main(){ int a = 1; int &b = a; cout << "a: " << a<<endl; cout << "b: " << b<<endl; cout<<原创 2021-04-10 19:54:32 · 122 阅读 · 0 评论 -
使用VS和codeblocks实现反汇编
使用VS和codeblocks实现反汇编1、使用VS实现反汇编的流程:添加断点:启动调试:点上方的小绿三角或者直接按F5或者“调试—>启动调试”,英文版本的是"Debug->Star Debugging"注意一定要在第二步之后再执行第三步:Debug->Windows->Disassembly或者是“调试—>窗口—>反汇编” 显示结果:2、使用Codeblocks实现反汇编添加断点 Debug->Start/Contin原创 2021-04-09 15:15:09 · 4057 阅读 · 0 评论 -
矩阵中的路径问题(DFS)
剑指 Offer 12. 矩阵中的路径和对引用的深入理解 在做这道题的时候偶然在评论区看见有前辈提到了使用引用,因此在这里回顾一下引用; 题目:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 例如,在下面的 3×4 的矩阵中包含单词 “ABCCE原创 2021-04-09 14:32:14 · 197 阅读 · 0 评论 -
顺序查找、折半查找、插值查找和二叉排序树查找
顺序查找、折半查找、插值查找和二叉排序树查找原创 2021-04-08 22:06:41 · 1622 阅读 · 1 评论 -
旋转数组的最小数字
剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0解法一:class Solution {public: int minArray(vector<int>&a原创 2021-04-07 23:42:54 · 49 阅读 · 0 评论 -
斐波那契数列与青蛙跳台阶问题
剑指 Offer 10- I. 斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2原创 2021-04-07 19:41:00 · 195 阅读 · 2 评论 -
用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例2:输入:["CQueue","delet原创 2021-04-05 16:10:25 · 45 阅读 · 0 评论 -
重建二叉树+前中后序遍历二叉树
剑指 Offer 07. 重建二叉树 要求:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 首先复习一下通过前中后序遍历一棵树:前序:根节点-左子树-右子树;中序:左子树-根节点-右子树;后序:左子树-右子树-根节点; 通过图来解释:前序遍历:ABDEGHCF中序遍历:DBGEHACF后序遍历:DGHEBFCA pia上一张前辈博文里的图:下面是前中后序遍历的代码:void PreTravel(B原创 2021-04-05 11:46:31 · 123 阅读 · 1 评论 -
从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表 要求:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 第一种思路:巧妙利用vector的相关函数,代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class原创 2021-04-04 23:19:38 · 52 阅读 · 0 评论 -
替换空格
剑指 Offer 05. 替换空格 使用python做的时候直接调用replace函数即可; 使用c++做这道题的时候莫名的好多string函数不能使用,比如append等;所以字符串拼接的时候我直接使用的加号; 代码如下:pythonclass Solution(object): def replaceSpace(self, s): """ :type s: str :rtype: str """原创 2021-04-04 22:24:19 · 40 阅读 · 0 评论 -
二维数组中的查找 -顺序、折半
剑指 Offer 04. 二维数组中的查找思路:比较target和每行第一个元素、最后一个元素之间的大小关系,找到target对应所在的行,然后在该行内查找即可;在行内查找就可以使用多种思路了,顺序或者折半等等;顺序查找的代码:class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int rows = mat原创 2021-04-04 15:11:46 · 196 阅读 · 0 评论 -
C和C++中用变量定义数组并赋初值,以及vector的相关操作
C和C++中用变量定义数组并赋初值 下面写的仅仅是个人的一点总结,因为水平有限,如果有什么错误欢迎大家批评指正,不胜感激。在C和C++中,如果使用变量声明数组大小,尽量不要同时进行初始化,通常会编译错误,因此,我觉得最好还是先声明,再赋值;在c中,可以这样声明:int arr[length];或者是使用vector来声明:vector <int> array(length);来声明;或者使用malloc函数:int* p = (int *) malloc ( sizeof(int)原创 2021-04-03 16:56:51 · 7049 阅读 · 1 评论 -
数组中重复的数字
剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000代码:int findRepeatNumber(int* nums, int numsSize){ i原创 2021-04-03 16:14:12 · 80 阅读 · 0 评论