自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 题解 HZOJ.511.最少操作次数 贪心 正难则反 C/C++

需要贪心,不断贪当次最优解,以获得全局最优解。当次最优解又该怎么考虑呢?初步设想:k > 1时,a * k后 a 的变化量最大,应该多做 * k 的操作用题目验证:2 >> 4 >> 8 >> 9 >> 10,是 4步而不是 3步,出了什么问题?再次思考:正是因为 * k后 a 的变化量大,导致 a * k形成的数列相邻元素差值过大当 b处在该数列相邻元素中间时,最后一次 * k完需要很多次 + 1才能将 a修正到 b+ 1 起到一个修正的作用。先 + 1,再 * k

2024-10-13 09:15:13 244

原创 题解 洛谷 Luogu.P1314 [NOIP2011 提高组] 聪明的质监员 二分算法 二分答案 前缀和 C/C++

目的:在 [wmin, wmax] 中查找使检验结果 y 与标准值 s 差的绝对值的最小值 |y - s|特征:1.在某区间内查找一个数 2.检验值 yi 随 W 的增长单调递减 3.需要频繁查询区间和值特征 1.2.对应二分答案,特征 3.对应前缀和思路:套二分答案模板,再通过前缀和实现一个 W & yi 的映射函数思路细节见代码注释

2024-10-12 21:39:00 442

原创 题解 HZOJ 284 超市卖货 C/C++

思路:每次寻找价格最高的商品,并尝试卖掉它:寻找未卖出商品的日期,优先锁定其保质期最后一天,若该日期已卖出则继续向前寻找能找到未卖出商品的日期时,收入增加,标记该日期代码实现:为了方便地找到价格最高的商品,我们先对商品价格连带其保质期进行排序因为我最近写了堆的底层结构,懒得用其他方法,所以就直接拿过来用了 (其实写个结构体然后 qsort() 一下就行,或者用 map就是注意在交换价格的同时还要交换保质期

2024-09-27 21:57:01 605

原创 题解 HZOJ 265 括号画家 C/C++

就是判断合法括号序列的升级版:找到最长合法括号序列括号序列合法性判断一般都会用到 栈 结构遇到左括号入栈,遇到右括号判断是否与栈顶括号匹配该题我们只需要在出入栈的过程中标记合法括号序列的位置:((({}[]((([]{()}}))[][]00011110001111110001111最后找到最长合法序列即可标记合法括号序列位置的方法:在括号匹配后完成如下操作:1.标记当前遍历位置,即合法左括号位置2.向前寻找并标记第一个未标记的位置,即合法右括号位置

2024-09-22 15:48:58 581

原创 纯C 生成二叉树广义表 根据广义表重构二叉树

讲解很多都写在注释里了,重构二叉树的过程后面单独拿出来讲重构二叉树:先定义函数功能:以根节点+括号对为单位进行处理根据 arr & p 还原二叉树,返回其根节点,并令 *p 指向队列中的合适位置(如碰到 '(' 就要在函数结束前再令 *p 后移一位,以跳出括号对)再写函数框架:以根节点为单位进行处理时,先看第一个节点,因为确保这个节点是根节点所以直接创建并初始化它的右边要么是 INT_MAX (结束),要么是 '(' (左右子树)再详细完善进入第一个括号对后应进行的操作

2024-09-16 08:55:23 637

原创 题解 力扣 LeetCode 105 从前序与中序遍历序列构造二叉树 C/C++

每次在中序遍历序列片段中找到前序遍历序列队首,这是该层的根节点该位置左侧是左子树,右侧是右子树再分别在左右子树序列中进行同样操作,找到左右子树的根节点,循环往复得到整棵树每次找到一层的根节点就从前序遍历序列中出队它前序遍历序列队列队首用head标记arrSize表示该次能访问的中序遍历序列片段的长度,若

2024-09-12 19:57:39 831

原创 题解 力扣 LeedCode 622 设计循环队列 C/C++

思路很简单但是实现起来比较繁琐,遇到问题可以参阅我的代码

2024-09-10 07:55:09 482

原创 题解 HZOJ 595 程序调用关系 C/C++

解决程序的运行、函数之间的运行一般都需要用到栈的思想栈直接用数组+top就能实现了我之前用C写过栈的底层了懒得再写一遍更简单的这种所以直接把之前写的搬过来了 (目标函数target是在最后给的所以不能边输入边处理,需要开个很大的二维数组s存储所有输入结果再处理处理结果存入栈S和a:每读到一个函数字符串就将其按顺序存入a,该函数字符串在a中的编号存入S每读到一个return就出栈一旦读到target就根据S中存入的编号输出a中对应的函数字符串

2024-09-08 12:36:42 691

原创 题解 力扣 LeetCode 19 删除链表的倒数第N个结点 C/C++

用指针数组记录链表各个节点的地址,遍历一遍就解决问题指针数组用 NULL 初始化遍历同时达成两个目的:1.获取链表大小 2.记录链表各节点地址遍历完令所删除节点的上一个节点指向所删除节点的下一个节点即可注意特判 n 为 count 的情况最近写过不止一道链表与数组结合的题通常单向不循环链表只能顺着->next一个一个访问过去但是与数组结合后可以赋予链表一部分顺序表的特点,通过下标就能访问了,这样会简单特别多

2024-09-02 07:22:35 358

原创 题解 力扣 LeetCode 61 旋转链表 C/C++

时间复杂度 O(N)1.特殊情况判断:head == NULL2.获取链表长度 length,该数据很有用,等下会用到好几次3.k %= length,防止 k过大出现多轮重复操作4.找到将来的末节点和头结点,记录将来的头结点后,将来的末节点->next = NULL举个例子:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, NULL}rotate 3 >>{8, 9, 10, 1, 2, 3, 4, 5, 6, 7, NULL}7 是将来的末节点,8 是将来的头结点

2024-09-02 04:05:33 401

原创 题解 力扣 LeetCode 206 反转链表 C/C++ 三种思路

可以用迭代和递归来做,每种又可以具体写成不同样子,这里给出三种不同思路的代码先说迭代:遍历整个链表第一个节点是将来的最后一个节点,令它指向 NULL之后的每个节点指向之前的节点即可,每次反转前都要记录一下下一个节点否则会和之后的节点断开联系former 用来记录之前的节点latter 用来在该次反转前记录下一个节点p 不为 NULL 就继续执行,结束执行后返回 p循环体上半部分结束后判断 latter,因为我们要返回 p 作为最后一个节点的地址所以不能让 p == NULL

2024-09-01 08:03:44 1260

原创 题解 AtCoder ABC129 C Typical Stairs C/C++

不难看出此题是斐波那契数列的变种只需要在斐波那契数列的基础上讨论中断的情况1.当没有遇到坏阶梯时 2.遇到单独的坏阶梯时 3.遇到连续的坏阶梯时当没有遇到坏阶梯时:显然只需要简单地重复 a[i] = a[i - 1] + a[i - 2],最后输出ans(n)遇到单独的坏阶梯时,举个例子:前10个是好的,ans(10)=89,第11个坏了,跨2阶直接到第12个我们只有一种方式从第10个跨到第12个,显然ans(12)也是89我们在循环中写上判断

2024-08-27 19:50:31 351

原创 递归实现指数型、组合型、排列型枚举,按字典序输出

按位枚举即可,设枚举的位数是 i,该位最小可枚举的是 j,该位枚举到 n 为止我们需要一个数组来存放每位的数据。一开始我没开数组,结果写了半天hh所以我们需要设计的函数有 4 个参数,f(int i, int j, int n, int* pa)每位的数字,每次枚举完都需要输出,可以将此单独写成一个函数,print_ans(int i, int* pa)每次枚举完枚举下一位,递归,直到 n 结束

2024-08-19 18:52:19 263

原创 汉诺塔思路简述与代码实现 (输入圆盘数量输出操作次数版)

对于n个圆盘,进行一轮如下操作:0.视上面n-1个圆盘为一个整体1.将该整体移动到这样一个柱上:非最终目标柱 && 非该整体当前所在柱2.将最底下的那个圆盘移动到最终目标柱上3.将该整体移动到最终目标柱上对于以上的1.3.操作中的任何一个,如果该次操作的整体,圆盘数量不为1则直接先对该整体再进行一轮操作如果该次操作的整体,圆盘数量为1,则该次操作正常结束,不用再执行

2024-08-14 09:55:54 130 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除