- 博客(58)
- 收藏
- 关注
原创 基本算法--蓝桥杯备考(二)
贪心就是把问题分为多个步骤,每个步骤都选择当前的最优方案,每一步都不考虑对下步的影响,在后续的步骤中也不能回头改变前面的选择。例如在背包问题中贪心算法就很实用,有一堆价值不同的物品且每件物品是可以分割的,每次只放当前最贵的物品,背包放满后一定是价值最高的。因为贪心算法每个步骤都是局部最优解,所以计算量很小,与此相反暴力算法是计算复杂度最差的,因为他考虑到了所有的情况。用贪心不一定能得到最优解,但是他算法简单并且效率高,所以可以用来骗分。
2025-07-27 14:16:23
504
1
原创 最大团--贪心例题
这是一个图论(可能是,主播还没学,瞎说的)和贪心的结合体,整个题的核心在于这个公式,首先我们先假设按x值进行了排序(之所以在代码中没有体现,是因为在这里排好序之后后面的sort函数会再次进行排序,这次的排序的意义就会消失,所以只是假设就可以,不影响最终结果),得出xj>=xi.然后我们进行合并同类项,得出xj-wj>=xi+wi根据这个我们来推导三个点x1<=x2<=x3的关系。若x1和x2有边,则应有x2-w2>=x1+w1;若x2和x3有边,则应有x3-w3>=x2+w2;
2025-07-24 20:09:11
337
原创 购物--贪心例题
设已经组合出1-s的值,,即已经得到1,2,3,4,。。。,s,下一步扩展到s+1。当然如果能顺便扩展到s+2,s+3,...,s+v则更好,扩展的越大越好,这样就能用尽量少的面值扩展出更大的数。只要增加一个最大的 <=当前已经扩展到的值 的数v,就可以保证这些所选的硬币可以扩展到S+V的数。
2025-07-20 19:21:15
197
原创 买二赠一--贪心例题
在一个有序序列上进行二分查找,返回值下个第一个大于等于x元素的位置。如果不存在这样的元素,则返回尾迭代器。只要在这个基础上减一,就会得到小于等于x的数。不过需要注意的是他返回的是迭代器(是在整体内存上的地址),我们还需要将它转化为数组下标,只需要在迭代器的基础上减去数组的首地址即可。
2025-07-20 14:58:18
230
原创 关于vector中的erase的强调
我们来看一串代码,这串代码利用erase函数删除了数值为3的元素,但是其实他的迭代器已经失效了(虽然从原理上来讲他之后的元素会往前移动一位),包括指向被删除元素及其之后元素的迭代器都。那么该如何避免这种情况呢,那就是利用erase的返回值,他会返回一个新的指向后面的元素的迭代器,我们可以利用这个来更新it值,具体如下。此时如果继续对it迭代器进行操作,会产生未定义行为。例如下面这串代码,会显示如下错误。
2025-07-17 18:51:58
333
原创 填充--贪心例题
一道简单的贪心算法,只需要考虑相邻的两个数就可以了,不过一定要小心数组越界问题,一旦越界访问,只能通过百分之八十的案例,笔者在此猜测可能是越界访问到的数据正好是‘?’,通过了if判断。
2025-07-17 13:52:35
166
原创 管道--二分例题
首先要明白一种贪心算法(区间覆盖问题),假设有一间长度为的走廊,我们有五块只能覆盖特定区域的地毯,分别为首先我们要进行排序将x值进行升序排序的同时,对y值进行降序排序,排序完就是首先设定初始坐标变量为首地址1,然后寻找x值也为1的区间为[1,4],然后找在1到4范围中的x值并且y值较大的数,则为[2,6]。按照此步骤最后可以完全覆盖地毯并且用料最少的方案是。
2025-07-10 16:13:10
291
原创 青蛙过河--二分例题
1.首先学会贪心算法,与其看成一只青蛙来回地走2x次,不如想成有2x只青蛙,每只青蛙只走一边,也就是求局部最优解。2.假设跳跃距离为y,则在所有石头内排列出所有可能出现的y,如果所有的y都大于等于2x,则可以通过。3.然后进行二分优化,需要二分的是青蛙的跳跃距离,最小值是1,最大值是n假设跳跃距离为2(需要进行三次y的判读)
2025-07-09 14:36:13
192
原创 求阶乘--二分例题
想要求一个数阶乘之后有几个零,首先构成10的数字只能是5和2,又因为在实际的阶乘运算中2的数量远远大于5,所以只需要计算这个数字阶乘的过程中一共产生了多少个5就可以计算末端有多少个0了。
2025-07-08 15:15:23
259
原创 重新排序--一维差分例题
首先创建一个计数数组,作用是识别各个数被调用了多少次,然后对原数组和计数数组进行排序,然后将依次将计数数组中数量最多的和原数组中数值最大的相乘即可。
2025-07-01 18:54:27
220
3
原创 异或和之和--前缀和例题三
先计算单个元素所有可能的异或和加起来啊,最后再将所有元素的异或和加起来。(只能通过百分之五十的测试用例)注意:单个数据异或相当于他本身与0进行异或(又因为0和任何数异或都等于它本身)
2025-06-27 15:53:01
221
1
原创 可获得的最小取值--前缀和例一
题目:使用贪心与前缀和算法求解最优解问题 思路:贪心算法在特定情况下不适用,需要结合前缀和以空间换时间。对数组排序后,通过遍历所有可能的操作组合(操作一x次,操作二k-x次),利用前缀和快速计算最小值。 解法:排序数组后构建前缀和数组,然后遍历p从1到k,计算sum[n]-sum[n+p-k]+sum[2*p]的最小值。 注意:前缀和数组初始化时i从1开始,避免越界问题。
2025-06-26 15:53:32
330
原创 排序和排列——蓝桥杯备考
本次用下面的例题详解这十种排序算法将读入的 N 个数从小到大排序后输出。第一行为一个正整数 N。第二行包含 N 个空格隔开的正整数 ai,为你需要进行排序的数。将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。输入输出样例54 2 4 5 11 2 4 4 5对于 20% 的数据,有 1≤N≤103;对于 100% 的数据,有 1≤N≤105,1≤ai≤109。
2025-05-22 21:55:23
436
原创 STL常用算法——C++
方式一:传入普通函数(printf1)方式2:利用仿函数,传入匿名函数对象注意:函数只需要传入函数名就行,但是仿函数需要传入函数对象。for_each在实际开发中是最常用的一个算法,需要熟练掌握注意:转运之前,需要将目标对象用resize()也开辟相同的空间。注意:find的返回值是迭代器底层原理就是二分查找,二分查找需要提前排序好才能用,二分查找需要的算力少。如果是无序序列,结果未知总结:对于统计自定义数据类型的时候,需要配合重载operator==
2025-04-22 18:14:58
2312
4
原创 map容器/multimap容器
public:it!=v.end();it++)cout <<"键值:" << it->first << " 实值:" << it->second;
2025-04-17 17:23:26
371
原创 set容器/multiset容器
题目:将他们按照年龄降序排序public:int age;= v.end();it++)cout <<"名字:" << it->name << " 年龄:" << it->age;int main()person p1("刘", 28);person p2("关", 28);person p3("张", 26);person p4("赵", 21);return 0;
2025-04-17 10:23:23
687
原创 list容器
相较于数组,数组插入元素需要把插入位置的所有元素全部往后移,消耗过多的算力。而链表只需要标明指针域,就可以快速对任意位置进行快速的插入和删除。
2025-04-15 09:09:44
331
原创 STL—vector容器
vector数据结构与数组非常相似,也成为单端数组。不同之处在于数组是静态空间,vector可以进行动态扩展。(动态扩展:并不是在原空间之后继续扩展,而是寻找更大的空间之后将原空间拷贝过去,并释放原空间)v.end:指向最后一个元素的下一个位置v.rend:指向第一个元素的前一个元素的位置v.begin:指向第一个元素的位置v.rbegin:指向倒数第一个元素的位置push.back():尾插pop.back():尾删注意:vector是支持随机访问的迭代器,即可以使用v.begin()+3;这种类型的代码
2025-04-02 17:09:59
773
原创 STL-C++
v.end();begin++)cout << "名字:" << begin->m_name << "年龄" << begin->m_age << endl;cout << "名字:" << (*begin).m_name << "年龄" << (*begin).m_age << endl;return 0;
2025-03-27 14:05:09
435
原创 类和对象-多态-C++
在多态中,通常父类中的虚函数是毫无意义的,主要都是来调用子类重写的内容,因此可以将虚函数改为纯虚函数。(当类中有了抽象函数,这个类也叫做抽象类)
2025-03-09 23:41:59
1011
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅