想要去欺负Leetcode的这些年——第二次,看看咱们是怎么把数组玩转,把数列理解透彻的~

💓专栏介绍

前阵子看到英雄哥之前早上直播的时候在弄《算法零基础100讲》,就想结合着英雄哥设定的学习顺序,他放置的习题,结合自己的理解然后编纂这个专栏的文章,尽量日更,假如忙不过来才两天一更的。不能说我抄袭哈,我自己是买了专栏的哈(狗头保命)
在这里插入图片描述
倘若对算法学习比较迷茫的小伙伴,可以考虑假如咱高校算法学习社区呀~

社区地址:高校算法学习社区


社区暂时有每日一题普及组以及提高组,由现役Acmer每日出题带领刷题,不会可群里随时提问喔。只是咱们拒绝划水党以及潜水党,需要的加入可私信执梗,也可以私信我哈。

在这里插入图片描述

💓数列的基础知识

在这里插入图片描述

基本概念

在这里插入图片描述
在程序中数列对应到数组了。程序中的数组,唯一需要注意的是数组角标越界的问题吧,C和C++在发生数组角标越界的时候,编译是可以正常过的,但是运行结果就可能十分的奇怪了。
在这里插入图片描述


🍏① 等差数列

在这里插入图片描述
等差数列这里需要注意的是在求公差上会和欧几里得算法联系起来。
举例——等差数列

🍎② 等比数列

在这里插入图片描述

🍑③ 斐波那契数列

斐波那契数列是递归、递推、动态规划都可以用它作为演示的,太绝绝子了。
在这里插入图片描述

在这里插入图片描述

💓现学现用 ^ - ^

在这里插入图片描述

第一题 509. 斐波那契数

💒题目描述

在这里插入图片描述

原题链接

🌟解题报告

第一想法是使用递推来解决这个问题,此时其实是有浅浅的动态规划的味道了,
即当前的这个状态i是只能由第i-1个状态和第i-2个状态共同转移过来。动态规划的本质也就是递推吧,我现在的理解是这种的。


因为本题只需要最后的结果,那么也就是说只需要当前i前一个状态i-1的数值以及前两个状态i-2的数值。那么其间的结果,其实不必存起来的,这种可以优化一定的空间。

🌻参考代码(C/C++版本)

C语言版本,C++用这个代码也是没有问题的
在这里插入图片描述

优化空间版本
C++用这个代码也是没有问题的,就不额外再放C++的代码了。
在这里插入图片描述

在这里插入图片描述

第二题 1137. 第 N 个泰波那契数

💒题目描述

在这里插入图片描述

题目链接

🌟解题报告

妥妥的变型题了,解题报告就不详细写啦~

🌻参考代码(C/C++版本)

C和C++都可以用
在这里插入图片描述

在这里插入图片描述

第三题 剑指 Offer 64. 求1+2+…+n

用逻辑与(&&)进行判断+浅认识sizeof

💒题目描述

在这里插入图片描述
题目链接

🌟解题报告

它不让咱们用这些,但是我偏要用,也是可以的,不影响Ac,但是咱们不能不讲码德,显得欺负这个老同志
在这里插入图片描述
不用乘除法是为了让咱们直接使用等差数列求和公式,循环这儿是遏制了迭代嘛。
可能已经有小伙伴想到使用递归来求解了,但是注意嗷,递归是需要判断递归的边界,进行判断或多或少需要使用if或者三元运算符,但是它们也被遏制了。

因为这个题是从1开始计数的,那么就可以使用逻辑与结合递归来实现。
每次进入递归之前判断当前进行递归的数是否是0了,倘若到0了,就终止,否则继续递归。

n += sunNums(n-1)这儿就是在具体的落实递归的逻辑了,也不用想的特别打脑壳的亚子。
比如首次传递的参数是n = 3,n += sunNums(n-1)这儿就是3 += 传入的参数是2的情况;
对于参数是2的,也是一样的逻辑,去加上传入参数是1的情况,也就可以得到2+1(因为0那儿进不去了)。
这个2+1是sunNums(n-1)的结果了,3+2+1最后得到的,就是最终答案了

🌻参考代码(C/C++版本)

这个代码C和C++都可以用
在这里插入图片描述
发现大佬们玩的是内存,比较秀,浅记录一下
在这里插入图片描述
等差数列的求和是可以这种描述的
在这里插入图片描述
为了能够让空间和咱们模拟的数字对应,使用布尔类型来存储,因为1个布尔变量是一字节,那么在这个梯形矩阵中就可以和模拟的数字对应上了。至于丈量空间的大小,就可以使用sizeof了。
在这里插入图片描述

在这里插入图片描述

第四题 896. 单调数列

枚举的时候,注意数组角标越界问题

💒题目描述

在这里插入图片描述
题目链接

🌟解题报告

这个是常规的模拟,就不写解题报告了吧

🌻参考代码(C/C++版本)

在这里插入图片描述
C++的代码
在这里插入图片描述

在这里插入图片描述

第五题 1313. 解压缩编码列表

💒题目描述

在这里插入图片描述
题目链接

🌟解题报告

确实是常规的模拟,C++这么感觉没有什么特殊的,倒是在C语言这儿,要赋值一个数组长度,感觉有点幺蛾子呀
在这里插入图片描述

🌻参考代码(C/C++版本)

C语言版本
在这里插入图片描述
C++版本
在这里插入图片描述

在这里插入图片描述

第六题 剑指 Offer 57 - II. 和为s的连续正数序列

用双指针实现滑动窗口

💒题目描述

在这里插入图片描述
题目链接

🌟解题报告

滑动窗口其实可以通过名字意会出来吧~
设连续正整数序列的左边界 left 和右边界right ,则可构建滑动窗口从左向右滑动。循环中,每轮判断滑动窗口内元素和与目标值 target 的大小关系,若相等则记录结果,若大于 target 则移动左边界 left (以减小窗口内的元素和),若小于target 则移动右边界right (以增大窗口内的元素和)。


算法实现流程
① 初始化: 左边界left = 1,右边界right = 2,总和sum = 1+2
② 进入双指针迭代的循环
left > right时跳出循环。
——sum > target,将left 剔除,更新总和sumleft++
——sum < targetright++,将right增加,更新总和sum
——sum == target,对于本题,记录当前的结果,向右移动左边界

在这里插入图片描述
浅借一下K神的图…

🌻参考代码(C/C++版本)

C版本
在这里插入图片描述
C++版本
在这里插入图片描述

在这里插入图片描述

第七题 829. 连续整数求和

💒题目描述

在这里插入图片描述

🌟解题报告

这个题挂的是困难的标签,但是我可能没有get到相应的点,用常规的模拟解决出来了。
因为题目要求咱找到连续的,且总和为n的情况,那咱们从小到大的去枚举,枚举到符合条件,也就是(参数n-总和sum)%枚举的个数cnt == 0的时候,就可以进行统计了。

🌻参考代码(C/C++版本)

C语言版本
在这里插入图片描述
C++版本
在这里插入图片描述

在这里插入图片描述

💓总结

今天了:
① 用到数组首先要注意下标吧,避免出现数组角标越界
② 双指针实现滑动串口掌握一下
③ 逻辑与用来实现短路的想法浅记一下~

评论 84
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值