牛客网刷题笔记

好久没有更新过博客了,原因其实就是懒,好久一段时间没有什么追求,工作上也是长时间没有太大的压力,浑浑噩噩度日。最近脱单了,女朋友真的很优秀,突然就有种紧张感,也突然觉得自己配不上人家,无论是学校还是工作能力,其实只有我自己知道看起来光鲜的工作表面下,是自己难以启齿那非常欠缺的实力。所以最近其实也在想考研(非全),希望可以提升一下自己,感觉自己这种懒癌患者,没有一点压力根本无法谈及进步,看了一天的计算机相关专业的非全信息,还是没有理清头绪。想想重拾一下本博,希望以后可以持续不断的更博,无论是工作上的进步还是以后真的打算考研的学习历程,我都希望可以坚持下来。加油吧,再也不要做一个混子了,我要配的上她-我的月亮。

有10^8个村庄排在一条公路上,依次编号为0~10^8-1,相邻村庄距离为1,其中有n个村庄居住着牛牛,居住着牛牛的村庄从小到大依次为a0~an-1,其中保证a0=0.
现在需要建设车站,有两个要求必须被满足:
1、每个有牛牛居住的村庄必须修建车站。
2、相邻车站的距离必须为1或为某个质数。
现给出n和a数组,求需要建设车站的最小数量。

示例:

输入 3, [0,7,11]

输出 4

说明 在0,7,8,11处建造车站,符合要求。

个人思路:有牛的村庄必须要建车站,所以最后一个有牛的村庄是最后一个车站(最小数量)。示例中11,所以对应的最少0,7,11是必须要建车站的,题目中还有一个要求是车站距离要是质数,那么7-11之间距离4,显然不符合要求,所以要在中间再建一个车站。那么由示例这个点去发散思维, n是必须建造车站的数量,a[i+1]-a[i]如果是质数,则不用在中间加车站;如果a[i+1]-a[i]不是质数,result++。那么验证一下如果是[0,9,13],那么0-9之间也是再加一个车站就可以了么?0,9之间质数有2,3,5,7。在2,7任意加一个车站就可以了,所以是0,2,9,11,13或者0,7,9,11,13。

结果:错误!!!

分析:还是考虑的情况不周全,看了网上的分析才发现自己的思维太简单了。相邻有牛的村庄,距离差如果是质数,则不用加车站。但是如果不是质数,分类讨论如果是偶数的话,则偶数可以是两个质数的和,则加一个车站即可;如果是奇数,重点在这里!!!因为我举例9,9-2=7也是质数,所以9可以是两个质数的和,但是如果是质数17,那么就不一样了,质数17想想可以是两个质数的和吗?0-17中间的质数有2,3,5,7,11,13,发现并不可以啊!!!所以这里可以从2着手,因为如果任意一个质数假设是j,j-2是质数那么j=2+(j-2),即两个质数之和,如果j-2不是质数那么j就是三个质数之和,所以需要result+=2。

居然还是个世界级的数学难题,哥德巴赫猜想,有木有被秀到!!!太强了。那么废话不多说,我们直接代码实现一下。(弱鸡代码能力,求指教,别喷我啊)

    int is_prime(int a){
        for(int i = 2; i < a; i++)
        {
            if(a % i == 0)
            {
                return 0;
            }
        }
        return 1;
    }
    int work(int n, int* a, int aLen) {
        int result = 1;
        if(n==0 && n==1)
        {
            aLen = n;
            return aLen;
        }
        for(int i = 0; i < n-1; i++)
        {
            int len = a[i+1]-a[i];
            if(is_prime(len) == 1)
            {
                result++;
            }
            else if(len % 2 == 0 || is_prime(len-2))
            {
                result+=2;
            }else{
                result+=3;
            }
        }
        aLen = result;
        return aLen;
    }

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Labuladong"是一个著名的算法解博主,他的笔记非常受欢迎。他的笔记具有以下几个特点: 1. 思路清晰:Labuladong的笔记总是能够很清晰地阐述解思路。他善于将复杂的问简化为易于理解的小问,并通过逐步引入关键概念和方法,帮助读者理解并掌握解思路。 2. 逻辑严谨:Labuladong的笔记经过深思熟虑,逻辑严谨。他会从问的定义开始,逐步引入相关的概念和解思路,循序渐进地解决问。这种严谨的逻辑结构有助于读者理解和消化算法的核心思想。 3. 举例详细:Labuladong的笔记通常会通过具体的例子来说明解思路。这种举例的方式不仅能够帮助读者更好地理解解方法,还可以帮助读者更好地应用这些方法解决其他类似的问。 4. 知识点整合:Labuladong的笔记不仅仅是一个解,而是将相关的算法知识点整合起来,构建出一个完整的学习体系。他会引入一些底层的算法原理,将不同的解方法进行比较和总结。这种整合的方式能够帮助读者更好地理解和掌握算法的本质。 总之,Labuladong的笔记以其思路清晰、逻辑严谨、举例详细和知识点整合等特点,为广大读者提供了一种深入学习和理解算法的有效途径。通过阅读他的笔记并进行实践,读者能够提高解能力,并在面对各种算法问时能够找到正确、高效的解决方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值