
数据结构与算法
算法
我就不信这个邪
这个作者很懒,什么都没留下…
展开
-
蓝桥杯数正方形
在一个 N×N 的点阵上,取其中 4 个点恰好组成一个正方形的 4 个顶点,一共有多少种不同的取法?这是一道数学归纳题, 正方形可以正着摆放, 也可以斜着摆放, 对于 n * n 的点集, 最大正方形为 (n-1)*(n-1)考虑一个最大矩形内每个边长的正方形, 不论其在何位置1.对于正放的正方形对于边长为 n - 1 的正方形, 正放的有 1*1正方形 (n-1) * (n - 1) 个, 2*2正方形 (n-2) * (n - 2) 个, 3*3正方形 (n-2) * (n - 2)个, .转载 2022-03-24 20:11:23 · 913 阅读 · 0 评论 -
C++STL模板平衡二叉树(自动调节平衡、非递归遍历、合并复制删除、横竖打印树、树的复制等方法)
#include <iostream>#include <queue>#include <stack>#include <climits>#include <cstring>#include <iomanip>#define ArraySize 2048/***二叉查找树***/using namespace std;enum EF { LH = 1, EH = 0, RH = -1};templ.原创 2021-07-22 22:41:02 · 269 阅读 · 0 评论 -
PAT1007 素数对猜想
#include <iostream>#include <valarray>#include <vector>using namespace std;bool IsPrime(int num){ if (num == 2 || num == 3 || num == 5){ return true; } if (num % 6 != 1 && num % 6 != 5){ retu.原创 2021-06-13 15:09:56 · 89 阅读 · 0 评论 -
最小和最大优先循环队列(C++)
#include <iostream>#define MAXSIZE 6/** * 循环队列思路: * front 指向队列第一个元素 rear 指向队列最后一个元素的后一个位置,当数组满时,rear最后一个位置,该位置不存储元素 * * 队列为空的条件 rear == front * 队列满的条件 Length() = maxSize - 1 * 队列长度 (rear - front + maxSize) % maxSize * 对头插入元素 f.原创 2021-06-16 10:48:01 · 210 阅读 · 0 评论 -
队列实现杨辉三角
#include <iostream>using namespace std;enum StatusCode { SUCCESS, UNDER_FLOW, OVER_FLOW};template<typename T>class Node {public: T data; Node<T> *next; Node(); explicit Node(T item, Node<T> *link = n..翻译 2021-06-14 21:26:32 · 348 阅读 · 0 评论 -
已知前序和中序构造原二叉树解析(C++)
首先简单给一段序列:pre [] = {A, B, D, E, C, F}in [] = {D, B, E, A, C, F }原树:{A, B, C, D, E, NULL, F}先序序列的首个结点一定为根节点,然后我们又从中序遍历知,其序列的根的左侧为左树,右侧为根的右树;将树按先左后右依次创建,在左树中又可存在左子树;由前序序列性质知,根结点后为左侧结点,然后为右侧根节点,右侧子树,因此由前序和中序可以还原一棵原二叉树。下面讲解一下代码实现原理,主要为递归创建,首先创建原创 2021-10-07 11:25:53 · 888 阅读 · 0 评论 -
力扣将二叉排序树转为递增类链表 897. Increasing Order Search Tree
将二叉排序树转为类链表,一种简单方法可以中序遍历将结果保存到数组中,遍历该数组创建类链表返回;该方法较为繁琐。方法二: 在中序遍历过程中改变指针的指向使其左孩子的右指针指向父节点,父节点左孩子指针置空;因为中序遍历先为最左节点,左右孩子均为空,所以需要一个哑结点和一个指向当前孩子节点的指针;然后从最左侧孩子开始,将哑结点右孩子指向根节点,根节点左孩子置空,当前节点向上移动到根节点;依次向上回溯改变指针指向,这里一个特殊情况,当node节点为tem...原创 2021-10-07 11:46:32 · 137 阅读 · 0 评论 -
1006 换个格式输出整数
#include <iostream>using namespace std;int main() { //定义字符串数组 string str[12] = { "1", "12", "123", "1234", "12345", "123456", "1234567", "12345678", "123456789","B", "S"}; int array[3]; string s; while(s.size() > 3 || s..原创 2021-06-09 13:23:26 · 181 阅读 · 2 评论 -
卡拉兹猜想
/** * 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1, * 则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了, * 我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字所覆盖。 * * 现在给定一系列待验证的数字,我们只需要验证.原创 2021-06-08 13:23:36 · 866 阅读 · 0 评论