当前位置: 首页 > article >正文

AI刷题-数列推进计算任务、数组中的幸运数问题

目录

一、数列推进计算任务

问题描述

测试样例

解题思路: 

问题理解

数据结构选择

算法步骤

优化思路

最终代码: 

运行结果: 

 二、数组中的幸运数问题

问题描述

测试样例

解题思路: 

问题理解

数据结构选择

算法步骤

关键点

最终代码:

运行结果: 

 ​编辑


一、数列推进计算任务

问题描述

小F想知道推进数列a的第 n 项值 anan​ ,该数列由 a0=0,a1=1,a2=1a0​=0,a1​=1,a2​=1 定义,并且对于每个 n>=3,an=an−1+an−2+an−3n>=3,an​=an−1​+an−2​+an−3​。

约束条件:

  • 时间限制:3s
  • n为整数,数据范围 1 ≤ n ≤ 25

测试样例

样例1:

输入:n = 5
输出:7

样例2:

输入:n = 12
输出:504

样例3:

输入:n = 18
输出:19513

解题思路: 

问题理解

你正在处理一个递推数列问题,数列的定义如下:

  • 初始条件:a_0 = 0a_1 = 1a_2 = 1
  • 递推关系:对于 n >= 3a_n = a_{n-1} + a_{n-2} + a_{n-3}

数据结构选择

由于这是一个递推问题,我们可以使用数组来存储已经计算过的数列值,以避免重复计算。

算法步骤

  1. 初始化数组:创建一个数组 a,并根据初始条件设置 a[0]a[1]a[2]
  2. 递推计算:从 n = 3 开始,使用递推公式 a[n] = a[n-1] + a[n-2] + a[n-3] 计算数列的值,直到 n
  3. 返回结果:返回数组中第 n 个元素的值。

优化思路

  • 记忆化:为了避免重复计算,可以使用记忆化技术,即在计算过程中存储已经计算过的值。
  • 动态规划:通过动态规划的方式,从底向上计算数列的值,这样可以避免递归带来的栈溢出问题。

 

最终代码: 

# include <iostream>
using namespace std;



int solution(int n) {
    // PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE
    // write code here
    if(n-3>=0)
        return solution(n-1)+solution(n-2)+solution(n-3);
    if(n==0)
        return 0;
    if (n==1||n==2) {
        return 1;
    }
}

int main() {
    cout << (solution(5) == 7) << endl;
    cout << (solution(12) == 504) << endl;
    cout << (solution(18) == 19513) << endl;
    return 0;
}

运行结果: 

 

 二、数组中的幸运数问题

问题描述

在给定整数数组中,找出最大满足该条件的数:出现次数等于其数值的整数,如果不存在则返回 -1。


测试样例

样例1:

输入:arr = [4, 3, 3, 2]
输出:-1

样例2:

输入:arr = [1, 2, 2, 3, 3, 4, 4, 4, 4, 3]
输出:4

样例3:

输入:arr = [6, 6, 6, 6, 6]
输出:-1

解题思路: 

问题理解

我们需要在一个整数数组中找到一个数,这个数的出现次数等于它本身的数值。如果不存在这样的数,则返回 -1。

数据结构选择

为了统计每个数出现的次数,我们可以使用一个哈希表(在C++中可以使用 std::unordered_map)。哈希表可以快速地记录和查询每个数出现的次数。

算法步骤

  1. 初始化哈希表:用于记录每个数出现的次数。
  2. 遍历数组:统计每个数出现的次数,并将其记录在哈希表中。
  3. 查找满足条件的数:再次遍历数组,检查每个数是否满足其出现次数等于其数值的条件。
  4. 返回结果:如果找到满足条件的数,返回该数;否则返回 -1。

关键点

  • 哈希表的使用可以大大提高统计和查询的效率。
  • 需要两次遍历数组:第一次用于统计,第二次用于查找。

最终代码:

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

int solution(std::vector<int> arr) {
    // PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE
    // write code here
    unordered_map<int, int> ar;
    for (auto i : arr) {
        ar[i]++;
    }
    
    // 遍历哈希表,查找满足条件的数
    for (auto it = ar.begin(); it != ar.end(); ++it) {
        if (it->first == it->second) {
            return it->first;
        }
    }
    
    return -1;
}

int main() {
    cout << (solution({4, 3, 3, 2}) == -1) << endl;
    cout << (solution({1, 2, 2, 3, 3, 4, 4, 4, 4, 3}) == 4) << endl;
    cout << (solution({6, 6, 6, 6, 6}) == -1) << endl;
    
    return 0;
}

运行结果: 

 

 

 


http://www.kler.cn/a/500333.html

相关文章:

  • 直流无刷电机控制(FOC):电流模式
  • 请求方式(基于注解实现)
  • d2j-dex2jar classes.dex 执行报错:not support version 问题解决
  • 在Django的Serializer的列表数据中剔除指定元素
  • 【复习小结】1-13
  • [ Spring ] Install MongoDB on Ubuntu24
  • windows及linux 安装 Yarn 4.x 版本
  • 记录一个在增量更新工具类
  • SpringBoot操作spark处理hdfs文件
  • 第432场周赛:跳过交替单元格的之字形遍历、机器人可以获得的最大金币数、图的最大边权的最小值、统计 K 次操作以内得到非递减子数组的数目
  • IDEA中创建maven项目
  • Redis之秒杀活动
  • django基于Python的智能停车管理系统
  • 限制图层列表
  • (2025,Cosmos,世界基础模型 (WFM) 平台,物理 AI,数据处理,分词器,世界基础模型预训练/后训练,3D一致性)
  • 【JVM-1】深入解析JVM:Java虚拟机的核心原理与工作机制
  • 【MySQL学习笔记】MySQL视图View
  • 解决nginx多层代理后应用部署后访问发现css、js、图片等样式加载失败
  • CPU缓存架构详解与Disruptor高性能内存队列实战
  • 《零基础Go语言算法实战》【题目 2-5】函数参数的值传递和引用传递
  • 【python A* pygame 格式化 自定义起点、终点、障碍】
  • C++中的unordered_set,unordered_map,哈希表/散列表以及哈希表的模拟实现
  • SqlServer: An expression services limit has been reached异常处理
  • 如何让QPS提升20倍