IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> [解题报告]《算法零基础100讲》(第2讲) 数列 -> 正文阅读

[数据结构与算法][解题报告]《算法零基础100讲》(第2讲) 数列

一、斐波那契数

力扣:509. 斐波那契数

题目描述

斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 01 开始,后面的每一项数字都是前面两项数字的和。

思路分析

f(0)=0,f(1)=1

f(n)=f(n-1)+f(n-2),其中n>1

通过递推来写

具体代码
class Solution {
public:
    int f[32];
    int fib(int n) {
        f[0]=0;f[1]=1;
        for(int i=2;i<=n;i++){
            f[i]=f[i-1]+f[i-2];
        }
        return f[n];
    }
};

二、第N个泰波那契数

力扣:1137.第N个泰波那契

题目描述

泰波那契序列 Tn 定义如下:

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

思路分析

根据递推公式,直接来

具体代码
class Solution {
public:
    int t[38];
    int tribonacci(int n) {
        t[0]=0;t[1]=1;t[2]=1;
        for(int i=3;i<=n;i++){
            t[i]=t[i-3]+t[i-2]+t[i-1];
        }
        return t[n];
    }
};

三、求1+2+3+…+n

力扣:剑指Offer 64.求1+2+3+…+n

题目描述

1+2+...+n ,要求不能使用乘除法。

思路分析

不能使用乘法,那就使用加法。通过递归计算即可。

具体代码
class Solution {
public:
    int sumNums(int n) {
        if(n==1)    return 1;
        return sumNums(n-1)+n;
    }
};

四、单调数列

力扣:896. 单调数列

题目描述

如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。当给定的数组 A 是单调数组时返回 true,否则返回 false。

思路分析

一次for循环遍历,若发现一次遍历时,同时满足前一个数比后面一个数大且后面一个数比前面一个数大(在一次循环遍历过程中),那么这个数列肯定不是单调的,返回false即可。否则返回true。

具体代码
class Solution {
public:
    bool isMonotonic(vector<int>& nums) {
        int n=nums.size();
        bool flag1=false;
        bool flag2=false;
        for(int i=1;i<n;i++){
            if(nums[i-1]<nums[i]){
                flag1=true;
            }
            if(nums[i-1]>nums[i]){
                flag2=true;
            }
        }
        return flag1&flag2?false:true;
    }
};

五、和为s的连续正数序列

力扣:剑指Offer 57- II.和为s的连续正数序列

题目描述

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

思路分析

定义两个指针l,r。通过公式求解l到r之间的数的和是否等于target。若sum(l,r)>target,l++;sum(l,r)<target,r++;若相等且l与r不相等,则符合题意,保留。同时l++, r=(l+r)/2;

具体代码
class Solution {
public:
    int sum(int l,int r){
        return (l+r)*(r-l+1)/2;
    }
    vector<vector<int>> findContinuousSequence(int target) {
        vector<vector<int>> ans;
        int l=1,r=2;
        while(l<=target){
            if(sum(l,r)>target){
                l++;
            }else if(sum(l,r)<target){
                r++;
            }else{
                if(l!=r){
                    vector<int> a;
                    for(int i=l;i<=r;i++)  a.push_back(i);
                    ans.push_back(a);
                }
                l++;
                r=(l+r)/2;
            }
        }
        return ans;
    }
};

六、连续整数求和

力扣:829.连续整数求和

题目描述

给定一个正整数 N,试求有多少组连续正整数满足所有数字之和为 N?(1 <= N <= 10 ^ 9)

思路分析

根据N的范围,若直接暴力枚举会超时。O(N)的算法可能也会超时。

我们不妨设N=(x+1)+(x+2)+…(x+k),其中x>=0,k>=1。N=kx+k*(k+1)/2。我们可以化简得到x,

x=N/k-(k+1)/2;若x为整数则符合要求。因此枚我们可以通过枚举k,求x即可,判断x是否符合要求。

(因为2N=k(2x+k+1),又因为k<2x+k+1,所以k * k <2*N,来缩小k的范围))

具体代码
class Solution {
public:
    int consecutiveNumbersSum(int n) {
        int ans = 0;
        for(int k=1;k*k<2*n;k++){
            int x=n/k-(k+1)/2;
            if((2*x+k+1)*k==2*n){
                ans++;
            }
        }
        return ans;
    }
};
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 13:06:58  更:2021-12-13 13:07:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:39:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码