- 专栏介绍
- 数列的基础知识
- ⏳基本概念
- ① 等差数列
- ② 等比数列
- ③ 斐波那契数列
- 现学现用 ^ - ^
- 第一题 509. 斐波那契数
- 题目描述
- 解题报告
- 参考代码(C/C++版本)
- 第二题 1137. 第 N 个泰波那契数
- 题目描述
- 解题报告
- 参考代码(C/C++版本)
- 第三题 剑指 Offer 64. 求1+2+…+n
- 题目描述
- 解题报告
- 参考代码(C/C++版本)
- 第四题 896. 单调数列
- 题目描述
- 解题报告
- 参考代码(C/C++版本)
- 第五题 1313. 解压缩编码列表
- 题目描述
- 解题报告
- 参考代码(C/C++版本)
- 第六题 剑指 Offer 57 - II. 和为s的连续正数序列
- 题目描述
- 解题报告
- 参考代码(C/C++版本)
- 第七题 829. 连续整数求和
- 题目描述
- 解题报告
- 参考代码(C/C++版本)
- 总结
专栏介绍前阵子看到英雄哥之前早上直播的时候在弄《算法零基础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,但是咱们不能不讲码德,显得欺负这个老同志
参考代码(C/C++版本)
不用乘除法是为了让咱们直接使用等差数列求和公式,循环这儿是遏制了迭代嘛。
可能已经有小伙伴想到使用递归来求解了,但是注意嗷,递归是需要判断递归的边界,进行判断或多或少需要使用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++都可以用
发现大佬们玩的是内存,比较秀,浅记录一下
等差数列的求和是可以这种描述的
为了能够让空间和咱们模拟的数字对应,使用布尔类型来存储,因为1个布尔变量是一字节,那么在这个梯形矩阵中就可以和模拟的数字对应上了。至于丈量空间的大小,就可以使用sizeof了。
第四题 896. 单调数列枚举的时候,注意数组角标越界问题
题目描述解题报告
题目链接这个是常规的模拟,就不写解题报告了吧
参考代码(C/C++版本)
C++的代码
第五题 1313. 解压缩编码列表 题目描述解题报告
题目链接确实是常规的模拟,C++这么感觉没有什么特殊的,倒是在C语言这儿,要赋值一个数组长度,感觉有点幺蛾子呀
参考代码(C/C++版本)
C语言版本
C++版本
第六题 剑指 Offer 57 - II. 和为s的连续正数序列用双指针实现滑动窗口
题目描述解题报告
题目链接滑动窗口其实可以通过名字意会出来吧~
参考代码(C/C++版本)
设连续正整数序列的左边界 left 和右边界right ,则可构建滑动窗口从左向右滑动。循环中,每轮判断滑动窗口内元素和与目标值 target 的大小关系,若相等则记录结果,若大于 target 则移动左边界 left (以减小窗口内的元素和),若小于target 则移动右边界right (以增大窗口内的元素和)。
算法实现流程
① 初始化: 左边界left = 1,右边界right = 2,总和sum = 1+2
② 进入双指针迭代的循环
当left > right时跳出循环。
——若sum > target,将left 剔除,更新总和sum,left++
——若sum < target,right++,将right增加,更新总和sum
——若sum == target,对于本题,记录当前的结果,向右移动左边界
浅借一下K神的图…C版本
C++版本
第七题 829. 连续整数求和 题目描述 解题报告这个题挂的是困难的标签,但是我可能没有get到相应的点,用常规的模拟解决出来了。
参考代码(C/C++版本)
因为题目要求咱找到连续的,且总和为n的情况,那咱们从小到大的去枚举,枚举到符合条件,也就是(参数n-总和sum)%枚举的个数cnt == 0的时候,就可以进行统计了。C语言版本
C++版本
总结今天了:
① 用到数组首先要注意下标吧,避免出现数组角标越界
② 双指针实现滑动串口掌握一下
③ 逻辑与用来实现短路的想法浅记一下~



