🔔文章目录
💓专栏介绍
前阵子看到英雄哥之前早上直播的时候在弄《算法零基础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
剔除,更新总和sum
,left++
——若sum
<target
,right++
,将right
增加,更新总和sum
——若sum
==target
,对于本题,记录当前的结果,向右移动左边界
浅借一下K神的图…🌻参考代码(C/C++版本)
C版本
C++版本
第七题 829. 连续整数求和
💒题目描述
🌟解题报告
这个题挂的是困难的标签,但是我可能没有get到相应的点,用常规的模拟解决出来了。
因为题目要求咱找到连续的,且总和为n的情况,那咱们从小到大的去枚举,枚举到符合条件,也就是(参数n-总和sum)%枚举的个数cnt == 0
的时候,就可以进行统计了。🌻参考代码(C/C++版本)
C语言版本
C++版本
💓总结
今天了:
① 用到数组首先要注意下标吧,避免出现数组角标越界
② 双指针实现滑动串口掌握一下
③ 逻辑与用来实现短路的想法浅记一下~