栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
    • 专栏介绍
    • 数列的基础知识
      • 基本概念
      • ① 等差数列
      • ② 等比数列
      • ③ 斐波那契数列
    • 现学现用 ^ - ^
      • 第一题 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,但是咱们不能不讲码德,显得欺负这个老同志

不用乘除法是为了让咱们直接使用等差数列求和公式,循环这儿是遏制了迭代嘛。
可能已经有小伙伴想到使用递归来求解了,但是注意嗷,递归是需要判断递归的边界,进行判断或多或少需要使用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++版本

总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853986.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号