蓝桥杯 算法训练 礼物答案注解
2022/2/10 1:19:57
本文主要是介绍蓝桥杯 算法训练 礼物答案注解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
问题描述
JiaoShou在爱琳大陆的旅行完毕,即将回家,为了纪念这次旅行,他决定带回一些礼物给好朋友。
在走出了怪物森林以后,JiaoShou看到了排成一排的N个石子。
这些石子很漂亮,JiaoShou决定以此为礼物。
但是这N个石子被施加了一种特殊的魔法。
如果要取走石子,必须按照以下的规则去取。
每次必须取连续的2*K个石子,并且满足前K个石子的重量和小于等于S,后K个石子的重量和小于等于S。
由于时间紧迫,Jiaoshou只能取一次。
现在JiaoShou找到了聪明的你,问他最多可以带走多少个石子。
本篇是讲解这位博主的解题方法。
一开始是不会做这道题的,看了这位博主的答案才慢慢明白思路。
首先,博主使用的是二分查找和前缀和,就是把连续的数组不断分成两部分,在一部分不符合题意时,范围就缩小到另一部分,以此类推…
第二,要理解这篇题解中mid是指每次check的K值,也就是整个长度的一半,在check函数中,for循环设置的条件是指1至mid的长度要大于mid+1至N的长度。
第三,在check函数中,当mid值不满足条件时,要从另一边查找。
第四,check函数的意义是从mid值起始,开始检查val[i] - val[i - mid] 和 val[i + mid] - val[i]的值是否都符合题意小于等于S。
第五,通过check函数一旦发现存在符合题意的情况,返回true,把mid值赋给l,重新找mid的值,…直到l和r的值相等退出循环。
第六,因为只有找到符合题意的mid值时才会把mid值赋给l,而mid值不管check返回true还是false,都会改变值,所以l才是最终确定的K值,即总长度的一半。所以,l乘2就是最终答案。
做这道题的时候,经历了读错题→没有思路→发现又读错题→看不懂题解→发现看错题解→不明白思路→明白思路的坎坷解题思路,最终明白了这道题的做法。
这篇题解非常经典简明,但是注解不多,加上本人太菜,所以废了很久时间才做出来,但是收获很多,后续也会以本篇笔记来复习。也希望能帮到后来者有跟我同样经历的人。
如果发现有内容错误处,评论指出,教学相长,感激不尽。
这篇关于蓝桥杯 算法训练 礼物答案注解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南