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;
}

运行结果: 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/952687.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Helm部署activemq

1.helm create activemq 创建helm文件目录 2.修改values.yaml 修改image和port 3. helm template activemq 渲染并输出 4. helm install activemq activemq/ -n chemical-park // 安装 5.启动成功

Windows 下Mamba2 / Vim / Vmamba 环境安装问题记录及解决方法终极版(无需绕过triton)

导航 安装教程导航 Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;初版&#xff09;Linux 下Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;重置版&#xff09;Windows …

力扣25. K个一组反转链表

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 示例 1&#xff1a; 输入&#xff…

动态规划练习五(子序列问题)

一、解题心得 首先子序列是不连续的&#xff0c;所以一定不会在 i - 1 位置去推 i 位置的 dp 值了&#xff0c;所以一般子序列问题是 O(n^2) 复杂度。但是可以通过哈希表等方式降成 O(n)。 以我带来的例题其实子序列问题可以分成两种&#xff1a; 1、以 i 位置为结尾&#x…

图像处理|膨胀操作

在图像处理领域&#xff0c;形态学操作是一种基于图像形状的操作&#xff0c;用于分析和处理图像中对象的几何结构。**膨胀操作&#xff08;Dilation&#xff09;**是形态学操作的一种&#xff0c;它能够扩展图像中白色区域&#xff08;前景&#xff09;或减少黑色区域&#xf…

汉图科技XP356DNL高速激光打印一体机综合性能测评

汉图科技XP356DNL高速激光打印一体机效率方面表现出色&#xff0c;支持A4纸型的高速打印&#xff0c;单面打印速度高达35页/分钟&#xff0c;自动双面打印速度可达32面/分钟&#xff0c;这样的速度在日常办公中能够极大地提高打印效率&#xff0c;减少等待时间&#xff0c;满足…

Unity + Firebase + GoogleSignIn 导入问题

我目前使用 Unity版本&#xff1a;2021.3.33f1 JDK版本为&#xff1a;1.8 Gradle 版本为&#xff1a;6.1.1 Firebase 版本: 9.6.0 Google Sign In 版本为&#xff1a; 1.0.1 问题1 &#xff1a;手机点击登录报错 apk转化成zip&#xff0c;解压&#xff0c;看到/lib/armeabi-v…

如何搭建 Vue.js 开源项目的 CI/CD 流水线

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

Elasticsarch:使用全文搜索在 ES|QL 中进行过滤 - 8.17

8.17 在 ES|QL 中引入了 match 和 qstr 函数&#xff0c;可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。 ES|QL 现在包含全文函数&#xff0c;可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法&#xf…

ISP流程--去马赛克详解

前言 本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知&#xff0c;彩色图像由一个个像元组成&#xff0c;每个像元又由红、绿、蓝&#xff08;RGB&#xff09;三通道构成。而相机传感器只能感知光的强度&#xff0c;无法直接感知光谱信息&#xff0c;即只有亮暗而没有颜色…

晨辉面试抽签和评分管理系统之七:面试成绩核算的三种方式

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

FastApi Swagger 序列化问题

问题 错误现象&#xff1a; fastapi的 swagger 界面无法正常打开控制台报错&#xff1a;raise PydanticInvalidForJsonSchema(fCannot generate a JsonSchema for {error_info}) 详细报错&#xff1a; File "d:\Envs\miniconda3\envs\xdagent\lib\site-packages\pydan…

Browser-Use Web UI:浏览器自动化与AI的完美结合

Browser-Use Web UI:浏览器自动化与AI的完美结合 前言简介一、克隆项目二、安装与环境配置1. Python版本要求2. 安装依赖3. 安装 Playwright4. 配置环境变量(非必要步骤)三、启动 WebUI四、配置1. Agent设置2. 大模型设置3. 浏览器相关设置4. 运行 Agent结语前言 Web UI是在…

秒懂虚拟化(三):桌面拟化、用户体验虚拟化、应用程序虚拟化全解析,通俗解读版

秒懂虚拟化&#xff08;二&#xff09;&#xff1a;服务器虚拟化、操作系统虚拟化、服务虚拟化全解析&#xff0c;通俗解读版-CSDN博客这篇文章学习了服务器虚拟化、操作系统虚拟化、服务器虚拟化&#xff0c;本节将继续学习桌面虚拟化、用户体验虚拟化、应用程序虚拟化。 1、…

UVM RAL Register Abstraction Layer:寄存器抽象层

topic 没有RAL的TB 有RAL的TB RAL介绍 summary

扬帆数据结构算法之舟,启航C++探索征途——LeetCode深度磨砺:顺序表技术精进实践

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 顺序表练习1.移除数组中指定的元素方法1&#xff08;顺序表&#xff09;方法2&#xff08;双指针&#xff09; 2.删除有序数组中的重复项…

【Linux网络编程】网络层 | IP协议 | 网段划分 | 私有IP和公有IP | NAT技术

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系…

Web基础之什么是HTTP协议

Q&#xff1a;什么是HTTP协议&#xff1f; 概念&#xff1a;Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 特点&#xff1a; 1&#xff0e;基于TCP协议&#xff1a;面向连接&#xff0c;安全 2&#xff0e;基…

小米路由器IPv6 功能使用指南

本文不限于多层路由使用IPv6 的情况&#xff0c;提供解决IPv6 无法获取的更硬核的方法&#xff0c;需要有ssh 工具。&#xff08;无安卓设备&#xff0c;测试环境win、mac、ios&#xff09; 首先明确一点&#xff0c;就是如果想让你的设备得到GUA 地址&#xff0c;即访问 6.i…

element plus 使用 upload 组件达到上传数量限制时隐藏上传按钮

最近在重构项目&#xff0c;使用了 element plus UI框架&#xff0c;有个功能是实现图片上传&#xff0c;且限制只能上传一张图片&#xff0c;结果&#xff0c;发现&#xff0c;可以限制只上传一张图片&#xff0c;但是上传按钮还在&#xff0c;如图&#xff1a; 解决办法&…