算法
文章平均质量分 83
数据结构与算法分析
Q渡劫
不会写还不滚去看官方文档
展开
-
动态规划问题
舍友正在健身,每天必须摄入不同食物的价值营养,但是每天摄入食物的总重量有一定限制,否则健身效果很差。那么如何在摄入食物重量一定的情况下,如何选择搭配食物以获取最大的营养价值?原创 2023-10-05 19:11:42 · 40 阅读 · 0 评论 -
将ip地址中的每一个字符串按照分隔符提取
该题采用 c++ 中的 string 完成比较方便对于字符串 string str1=“hehehe:hahaha:xixixi:lalala”定义 int pos = 0,记录子串的初始位置。原创 2023-04-14 21:42:26 · 398 阅读 · 0 评论 -
字符串数字转数字(面试题)
对于下面的while中的循环条件,这种写法有问题,不能识别以 26 个英文字符开头的字符数组,但是该字符数组中存在连续的数字,比如 char str[] = "kmmmm1255jj";这种情况下while 循环根本没有执行,所以即使 字符数组 中存在数字,也判断不了,返回值始终为 0 ,打印 结果也必然为 0。原创 2023-02-17 09:57:45 · 169 阅读 · 0 评论 -
判断二叉树是否为二叉排序树
该算法的实现是借助中序遍历来实现的,因为我们知道符合要求的二叉排序树的特点是父节点的值大于左子树的值但是小于右子树的值,所以借助在每一棵子树都有这样的特点,可以设计实现对二叉排序树的判断!当然该算法也可以直接使用先序遍历来实现!每当访问一个结点的时候就判断当前结点和孩子结点的大小关系!如果不满足二叉排序树的特点可以直接返回结果!分别在左右孩子同时存和一个存在一个不存在的情况下来实现算法!原创 2022-10-21 18:52:11 · 3850 阅读 · 0 评论 -
判断二叉树是否相等
在结点值相等的情况下执行先序遍历,递归判断!否则都是不相等的情况,包括值不相等的情况!判断如果其中一棵树为空,那么一定不相等!如果两棵都为空,那么一定相等!原创 2022-10-21 17:08:53 · 1212 阅读 · 0 评论 -
交换二叉树中各个节点的左右孩子
该算法实现最简单的是采用后序遍历递归实现!要想采用递归实现,必须深刻理解递归调用栈,只有这样才能写出符合题目的二叉树算法!注意二叉树交换左右孩子之后整个树的结构会发生变化,也即树的形状会发生变化,但是高度不变!使用后序比遍历,递归实现交换左右孩子!原创 2022-10-20 17:00:45 · 3227 阅读 · 0 评论 -
设单链表中有仅三类字符的数据元素(大写字母、数字和其他字符),要求利用原来单链表中的结点空间设计出三个单链表的算法,使每一个单链表中值包含同类字符
该算法是一个分类算法,即在原有的单链表的基础上将单链表中的每一个字符按照对应的属性进行分类!最简单的方法就是循环遍历单链表,然后将单链表中的每一个数据元素进行分类判断,属于哪个属性就使用尾插法或者头插法将当前结点插入到所属属性的单链表后面!直到遍历完整个单链表!本算法实际上是头插法或者尾插法的一个综合应用!需要注意的是一般在循环遍历插入元素这类问题中一般都会没使用尾插法或者头插法,所以应该好好掌握一下尾插法和头插法的算法思想!原创 2022-10-19 18:26:22 · 1563 阅读 · 0 评论 -
求一个结点x在在二叉树中的双亲结点算法
该算法的实现是借助二叉树的先序遍历。递归遍历二叉树,每一次递归调用首先利用先序遍历判断当前根节点是否存在左右孩子,若是存在并且左右中的数值就是所给参数的孩子结点,那么当前父节点肯定是所给孩子结点的父亲节点,直接使用return返回当前参数结点的父亲节点,强行退出递归调用栈,程序执行完毕!否则继续递归调用二叉树,直到查找成功或者失败!使用先序递归遍历思想完成算法设计。首先判断节点的左右孩子是否存在,若存在,并且左右孩子中有一个符合查找要求,则返回元素!否则,继续递归查找,直到成功或者找不到符合要求的结点!原创 2022-10-18 17:52:36 · 6933 阅读 · 8 评论 -
在单链表中删除值相同的多余的结点
从前往后遍历单链表,双层for循环或者while循环即可完成操作!依次遍历内层循环,使用外层循环作为对照,如果和外层循环中当前遍历的元素值相同,即可执行删除操作!原创 2022-10-13 22:33:43 · 2224 阅读 · 0 评论 -
快速排序思想的变形算法应用
(2)、先从表的最右面的位置使用 high 指针依次向左扫描,找到第一个关键字小于枢轴关键字 t 的记录,则将其移动到 low 所指的的位置。具体操作是,当 low < high 的时候,若 high 所指的关键字大于等于 t ,则向左移指针high(high–);(4)、重复上面的步骤(2)、(3),直到 low = high,此时 low 或者 High 所指的位置即是枢轴 t 在此趟排序中的最终位置,将 t 赋值给 low = high 的位置,原表被分成两个子表!和快速排序算法的思想是一样的。原创 2022-10-12 22:21:03 · 265 阅读 · 0 评论 -
使用顺序表、单链表求集合运算
遍历顺序表A,将A中每一个元素依次与顺序表B比较,如果相等直接跳过开始比较下一个元素,如果没有相等的直接放在顺序表C中!原创 2022-09-16 21:25:53 · 501 阅读 · 0 评论 -
整数n转换为字符串
很明显当刚开始执行convert()函数的时候,输入的是 n = 438 ,此时 438/10 = 43 不等于 0,那么又对 43 进行递归调用,43/10 = 4 不等于 0,又对 4 进行递归调用,4 /10 = 0,不满足条件,执行 4%10+‘0’ ,打印输出字符 4;43退栈 ,执行 438%10+‘0’,打印输出 8。解决本题的关键是要彻底理解递归函数的实质是系统背后调用 系统栈 来完成运算操作的,如果不理解递归函数的实质,否则很难解决本题!注:下面是c/c++中的数字与字符之间的转换关系!原创 2022-09-08 00:43:46 · 1874 阅读 · 5 评论