自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 12.26学习笔记

int Cmp(const void *p1,const void*p2){//这一函数用于按照名字拼音顺序比较结构体数组。* 由于本题比较的char*name在第一项,所以类似二维数组,可以先解一次引用得到指向字符串的指针。*也即:const char* const *left=p1;

2023-12-26 20:10:11 311 1

原创 贪心算法:

在满足时间最长的时候,尽可能选择满足他要求中的难度系数最小的,以给后面留出更多机会。也就是说,如果a*k还没有比b大的时候,(我们假设a与b左端点是对齐的,那么我们想让a先加上b的对应末尾之后,再*k)将每一个小岛映射为在x轴上的一维区间形式,从而问题转化为x轴上被染色的区间上要存在某点是雷达所在的位置。2.贪心算法适用情况:2张100,1张50,3张20,一张10,拿三张最大值是?放在区间的末尾,就是为了能够最大限度的满足部分重叠区间的最小值。在k进制下,当情况1满足时,说明我们还想让a进位来接近b。

2023-12-26 20:09:51 346 1

原创 回溯算法及其优化过程

之前枚举的时候,是对所有i从1到n枚举,其中也包括一些已经被占用了的数字。由此我们想到,可以用位运算,直接取二进制数字最小的非0位置。(方法,x&(-x),可以证明求得的就是x不为0的最小位权)然后枚举完后,再用x-=x&(-x)对于形如这样的两组(最后的终点都一样,且到目前为止的效果都一样),可以根据值的大小舍去。优化①:状态压缩:在输出全排列数组的时候,我们使用了一个vis数组,vis【i】=1代表i元素被占用了。我们发现x+y-1=i,表示在第i条正邪斜边的棋子,所以只要多取两个二进制数即可。

2023-12-24 13:19:47 880 1

原创 动态规划的优化问题

方法1;重新定义:因为第一块墙壁的不同颜色方法是“等价”的。所以略去第一块墙壁的状态定义。

2023-12-18 18:38:19 805 1

原创 从递归到动态规划

对于本题:我们分析可以得知,如果我们在k处切一刀,那么他的刀数应该等于(l,k)刀数+(k,r)刀数+1。2.找到递推关系:f[n][i][j]应该等于f[n][i][k](k!在实际代码时候,需要判断j是否小于v[i]的值,如果是的话就不需要比较最大值了(因为根本装不下第i件物品。3.递推式的边界条件: f[1][ i][j]=={1/0}当且仅当i==j时为1;定义:dp[i][j]表示s1字符串前i位和s2字符串的钱j位最长公共子序列。1.f(i,j)表示从顶点走到(i,j)点能获得的最大值。

2023-12-12 22:08:27 342

原创 11.27学习笔记(查找算法大总结)

非常抽象的插入操作,假设我要插入6层高度的10,先遍历查找10,标注经过的元素。发生哈希冲突时,冲突处理:1.开放定址法:根据当前的地址通过固定的规则重新得到另一个地址。如果mid指针指向1时候,因为mid的1也有可能就是第一个1,所以应该调整tail=mid;如果mid指针指向0时候,意味着要查找的1在mid后面,故head=mid+1;考虑数组:0 0 0 0 1 1 1 1 1 1;2.有f[x]==y的映射关系,需要完成给出y反求x的过程。比如,数据a-->1,5,7 数据b-->1,2,5.

2023-12-05 19:28:30 364

原创 11.25学习笔记

思考,对链表的排序,一定需要从前向后进行遍历。同时又由于数据太大,需要降到o(n²)下,所以本题最好选用快速排序和归并排序。注意sort函数那里,[&](int i,int j)->bool应该指的是一个返回bool类型的函数,所以也可以。这样可以省去abs函数的使用。

2023-11-27 18:44:15 291

原创 11.23学习笔记

他是第一行的最大值,是最后一列的最小值。插入排序:因为比如说,我有前5和后5,当我把后5放入已排序区时,我是可以做到后5放在前5的后面的。...5||5...3...待排序区中的最小值3与排序区第一位5交换,改变了两个5的相对位置。也就是说,最后一个元素调整(n-1)/2......所以 其实数量级都一样,都是o(n²)。冒泡排序其实 是每一轮将待排序区的最大值放到待排序区的最后一位,也就是已排序区的第一位。也和选择排序一样,分为已排序区和待排序区,但不同的是插入元素的时候放到合适的位置。

2023-11-25 11:27:51 717

原创 11.22学习笔记

将当前商品的过期日期d和集合中元素的数量n比较。如果d=n,我们就将利润p与集合中最小利润进行比较,以利润作 为是否插入的依据。2.考试时紧张,脑子不清晰,逻辑混乱。与其在那乱七八糟添加代码,还不如先暂时沉下心来好好想想代码实现的过程是什么样的。1.对异或运算如何实现没有在纸上想清楚,还是一样,没有思考好就不要上机敲!用构造的方法,从1开始往后构造丑数。2.没有注意到数据的大小,及时采取适合的实现方式。1.对平时作业题目的重视程度不够,总想着做完却没有学习他人的思维,没有认真想清楚正确的逻辑。

2023-11-23 16:52:12 15

原创 11.21学习笔记

一.集合(set):集合天生就有从小到大排序的性质,所以他就是一个小顶堆。如果要做一个大顶堆怎么办?可以先将每个元素都取负数,排完序后再取反。也就是,我们建立前后两个顶堆。如果是奇数个,我们只需要取大顶堆的堆顶元素。否则,就取两个堆的堆顶元素的均值。判断一下新元素和s1堆顶元素的大小关系:如果我比堆顶s1的堆顶还小,那我就去s1中,如果比最大值大,那就去s2;思路:既然链表都已经是有序的了,我们只需要考虑每个链表的头部,并予以比较。

2023-11-22 16:44:58 14

原创 11.3学习笔记

head指针(指向队头)和tail指针(指向队尾后的一个空地址)(排队买票)循环队列:多了一个count(记 录有多少个元素)为了解决队列的家溢出问题。推广一下,这是什么意思,-1就代表发生一件事,+1就代表解决了一件事情。二.栈:先进入,后出来(队列不改变元素间的顺序,而栈会改变。对栈的深入理解:对包含关系的处理--从括号匹配问题说起。在最后一个位置上,左括号数量==右括号数量。改写:遇到右括号就-1,遇到右括号就+1;一.队列:从队尾加入元素,从队头出元素。在任意位置上左括号数量>=右括号的数量。

2023-11-04 17:12:49 24 1

原创 10.31学习笔记

/建立两个队列,应该这么去理解,q是队列中的团队队列,如{3,1,2},而q[t]是不同团队的队列,如q[1]={301,1,123};//team[i]->>>team的编号;//输出,第t个团队的第一个人(他需要出队)if(q2[t].empty())//如果这个团队还没有人进入。if(q2[t].empty())//如果整个团队已经没有人了。//找到入队的人对应的团队编号;else if(cmd[0]=='E')//接受入队伍的指令。

2023-10-30 20:37:20 34 1

空空如也

空空如也

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

TA关注的人

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