华为OD机试 - 最多购买宝石数目 - 滑动窗口(Python/JS/C/C++ 2024 C卷 100分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

一、题目描述

橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为 gems[i],0<=i<n, n = gems.length

宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;

例如客户最大购买宝石个数为m,购买的宝石编号必须为gems[i],gems[i+1]…gemsi+m-1

假设你当前拥有总面值为value的钱,请问最多能购买到多少个宝石,如无法购买宝石,则返回 0。

二、输入描述

第一行输入n,参数类型为int,取值范围:[0,10^6],表示橱窗中宝石的总数量。

之后n行分别表示从第0个到第n-1个宝石的价格,即gems[0]到gems[n-1]的价格,类型为int,取值范围:(0,1000]。

之后一行输入v,类型为int,取值范围:[0,10^9]表示你拥有的钱。

三、输出描述

输出int类型的返回值,表示最大可购买的宝石数量。

四、测试用例

测试用例1

1、输入

7
8
4
6
3
1
6
7
10

2、输出

3

测试用例2

1、输入

9
6
1
3
1
8
9
3
2
4
15

2、输出

4

五、解题思路

  1. 使用两个指针 left 和 right 来表示滑动窗口的左右边界,初始化它们都为0。
  2. 不断尝试扩展右边界 right,直到我们无法再购买更多宝石或者超出了我们的预算。
  3. 在每次尝试扩展右边界的过程中,我们记录当前窗口内的宝石数量,并更新最大宝石数量。
  4. 如果当前窗口内的宝石总价值超过了我们的预算,我们就需要缩小窗口,即增加左边界 left,直到窗口内的宝石总价值不再超过预算或左边界 left 达到了 n - m,这是因为在这种情况下即使窗口再向右扩展也无法满足连续购买的条件。
  5. 最后,返回记录的最大宝石数量即可。

六、Python算法源码

# 导入必要的模块
import sysdef main():import sysimport sys# 读取输入input = sys.stdin.read().split()idx = 0n = int(input[idx])  # 宝石的总数量idx +=1gems = []for _ in range(n):gems.append(int(input[idx]))  # 读取每个宝石的价格idx +=1if idx < len(input):v = int(input[idx])  # 读取拥有的钱else:v =0  # 如果没有输入v,默认v为0left = 0  # 滑动窗口左边界right =0  # 滑动窗口右边界maxGems =0  # 最大可购买宝石数量sum_val =0  # 当前窗口内宝石总价值# 开始滑动窗口while right <n:sum_val += gems[right]  # 尝试扩展右边界,并更新窗口内宝石总价值right +=1# 如果当前窗口内宝石总价值超过了预算,缩小窗口while sum_val >v and left <n:sum_val -= gems[left]  # 缩小窗口,更新宝石总价值left +=1# 更新最大可购买宝石数量maxGems = max(maxGems, right - left)print(maxGems)  # 输出结果if __name__ == "__main__":main()

七、JavaScript算法源码

// 导入读取模块
const readline = require('readline');// 创建接口
const rl = readline.createInterface({input: process.stdin,output: process.stdout
});let input = [];
rl.on('line', (line) => {input.push(line);
}).on('close', () => {let idx = 0;const n = parseInt(input[idx++]); // 宝石的总数量let gems = [];for(let i=0;i<n;i++){gems.push(parseInt(input[idx++])) // 读取每个宝石的价格}const v = parseInt(input[idx++]) || 0; // 读取拥有的钱,若无输入则为0let left =0; // 滑动窗口左边界let right =0; // 滑动窗口右边界let maxGems =0; // 最大可购买宝石数量let sum =0; // 当前窗口内宝石总价值// 开始滑动窗口while(right <n){sum += gems[right]; // 尝试扩展右边界,并更新窗口内宝石总价值right++;// 如果当前窗口内宝石总价值超过了预算,缩小窗口while(sum >v && left <n){sum -= gems[left]; // 缩小窗口,更新宝石总价值left++;}// 更新最大可购买宝石数量maxGems = Math.max(maxGems, right - left);}console.log(maxGems); // 输出结果
});

八、C算法源码

#include <stdio.h>// 主函数
int main(){int n;scanf("%d", &n); // 宝石的总数量int gems[n];for(int i=0;i<n;i++){scanf("%d", &gems[i]); // 读取每个宝石的价格}long long v;scanf("%lld", &v); // 读取拥有的钱int left =0; // 滑动窗口左边界int right =0; // 滑动窗口右边界int maxGems =0; // 最大可购买宝石数量long long sum =0; // 当前窗口内宝石总价值// 开始滑动窗口while(right <n){sum += gems[right]; // 尝试扩展右边界,并更新窗口内宝石总价值right++;// 如果当前窗口内宝石总价值超过了预算,缩小窗口while(sum > v && left <n){sum -= gems[left]; // 缩小窗口,更新宝石总价值left++;}// 更新最大可购买宝石数量if(right - left > maxGems){maxGems = right - left;}}printf("%d\n", maxGems); // 输出结果return 0;
}

九、C++算法源码

#include <bits/stdc++.h>
using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(0);int n;cin >> n; // 宝石的总数量vector<int> gems(n);for(int &x : gems){cin >> x; // 读取每个宝石的价格}long long v;cin >> v; // 读取拥有的钱int left =0; // 滑动窗口左边界int right =0; // 滑动窗口右边界int maxGems =0; // 最大可购买宝石数量long long sum =0; // 当前窗口内宝石总价值// 开始滑动窗口while(right <n){sum += gems[right]; // 尝试扩展右边界,并更新窗口内宝石总价值right++;// 如果当前窗口内宝石总价值超过了预算,缩小窗口while(sum >v && left <n){sum -= gems[left]; // 缩小窗口,更新宝石总价值left++;}// 更新最大可购买宝石数量maxGems = max(maxGems, right - left);}cout << maxGems << "\n"; // 输出结果return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1:基本电路专题:R(电阻)的介绍

说实话这个其实我不想写的&#xff0c;因为这个是初中的知识&#xff0c;并没有很难&#xff0c;但是为了保持整齐性&#xff0c;我还是写了一下关于这个的知识点。是电子学中三大基本无源元件之一。&#xff08;R&#xff08;电阻&#xff09;,L&#xff08;电感&#xff09;,…

基于SpringBoot的“CSGO赛事管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“CSGO赛事管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 赛事信息界面图 赛事通知界面…

漏洞挖掘 | 通过域混淆绕过实现账户接管

由于这是一个私有项目&#xff0c;我将使用 example.com 来代替。 很长一段时间以来&#xff0c;我一直想在漏洞赏金项目中找到一个账户接管&#xff08;ATO&#xff09;漏洞。于是&#xff0c;我开始探索项目范围内的 account.example.com。 我做的第一件事就是注册一个新账…

视觉目标检测标注xml格式文件解析可视化 - python 实现

视觉目标检测任务&#xff0c;通常用 labelimage标注&#xff0c;对应的标注文件为xml。 该示例来源于开源项目&#xff1a;https://gitcode.com/DataBall/DataBall-detections-100s/overview 读取 xml 标注文件&#xff0c;并进行可视化示例如下&#xff1a; #-*-coding:ut…

地理征服营销与开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序的融合创新

摘要&#xff1a;本文探讨了地理征服营销这一创新营销策略与开源 AI 智能名片 2 1 链动模式 S2B2C 商城小程序的融合应用。首先阐述地理征服营销的概念和实施要点&#xff0c;接着介绍开源 AI 智能名片 2 1 链动模式 S2B2C 商城小程序的功能与优势&#xff0c;分析二者结合如…

三周精通FastAPI:24 OAuth2 实现简单的 Password 和 Bearer 验证

官网文档&#xff1a;https://fastapi.tiangolo.com/zh/tutorial/security/simple-oauth2/ OAuth2 实现简单的 Password 和 Bearer 验证 本章添加上一章示例中欠缺的部分&#xff0c;实现完整的安全流。 获取 username 和 password 首先&#xff0c;使用 FastAPI 安全工具获…

字节青训-兔群繁殖之谜

问题描述 生物学家小 R 正在研究一种特殊的兔子品种的繁殖模式。这种兔子的繁殖遵循以下规律&#xff1a; 每对成年兔子每个月会生育一对新的小兔子&#xff08;一雌一雄&#xff09;。新生的小兔子需要一个月成长&#xff0c;到第二个月才能开始繁殖。兔子永远不会死亡。 小 R…

MiniWord

1.nuget 下载配置 2.引用 3. var value = new Dictionary<string, object>() { ["nianfen"] = nianfen, ["yuefen"] = yuefen, ["yuefenjian1"] = (int.Par…

计算机毕业设计Python+大模型恶意木马流量检测与分类 恶意流量监测 随机森林模型 深度学习 机器学习 数据可视化 大数据毕业设计 信息安全 网络安全

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; Python大模型恶意木马流量检…

04.DDD与CQRS

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 定义职责分离DDD与CQRS的关系领域模型和查询模型特点命令场景的领域模型查询场景的查询模型 架构方案领域事件方案1&#xff1a…

专业140+总分410+武汉大学807信号与系统考研经验武大原936电子信息与通信工程,真题,大纲,参考书。

考研专业课807信号与系统(原936)140&#xff0c;总分410&#xff0c;顺利被武汉大学录取&#xff0c;群 里不少同学希望总结一下复习经验&#xff0c;回看这一年有得有失&#xff0c;总结一下希望给大家有些参考。考研还需从自身情况出发&#xff0c;制定适合自己的复习计划&am…

eclipse下载与安装(汉化教程)超详细

目录 一、下载eclipse安装包 三、配置eclipse 代码自动补全功能 安装汉化包 中英文切换 四、用eclipse写hello world 一、下载eclipse安装包 1、首先进入 eclipse官网 如下&#xff1a; 2、这里面有很多版本&#xff1b;我们小白一般选择第二个&#xff0c;向下滑动&…

【Kettle的安装与使用】使用Kettle实现mysql和hive的数据传输(使用Kettle将mysql数据导入hive、将hive数据导入mysql)

文章目录 一、安装1、解压2、修改字符集3、启动 二、实战1、将hive数据导入mysql2、将mysql数据导入到hive 一、安装 Kettle的安装包在文章结尾 1、解压 在windows中解压到一个非中文路径下 2、修改字符集 修改 spoon.bat 文件 "-Dfile.encodingUTF-8"3、启动…

RHCE笔记-DNS服务器

一.DNS简介 DNS&#xff08;域名系统&#xff09;是一种互联网服务&#xff0c;负责将我们熟悉的域名&#xff08;比如 www.example.com&#xff09;转换为计算机能理解的IP地址&#xff08;比如 192.0.2.1&#xff09;。这样&#xff0c;当你在浏览器中输入网址时&#xff0c;…

利用QGIS工具手动绘制线轨迹并生成地理信息geojson文件

前端想要获得一个完整的shp文件或者geojson的地理信息文件&#xff0c;可以利用QGIS工具手动绘制你想要的数据点位&#xff0c;然后导出图层生成对应的文件即可。 1、新建临时图层 选择线图层&#xff0c;点击ok创建临时图层。 2、绘制线图层 在工具栏中选择添加线要素&#…

面试记录(1)

java中的抽象类和接口的区别&#xff1a; 相同点 (1) 都可以被继承 (2) 都不能被实例化 (3) 都可以包含方法声明 (4) 派生类必须实现未实现的方法 不同点 1.关键字不同&#xff1a; ​ ① 继承抽象类的关键字是extends&#xff0c;而实现接口的关键字是implements&#xff1b;…

构建您自己的 RAG 应用程序:使用 Ollama、Python 和 ChromaDB 在本地设置 LLM 的分步指南

在数据隐私至关重要的时代&#xff0c;建立自己的本地语言模型 &#xff08;LLM&#xff09; 为公司和个人都提供了至关重要的解决方案。本教程旨在指导您完成使用 Ollama、Python 3 和 ChromaDB 创建自定义聊天机器人的过程&#xff0c;所有这些机器人都托管在您的系统本地。以…

聊聊Web3D 发展趋势

随着 Web 技术的不断演进&#xff0c;Web3D 正逐渐成为各行业数字化的重要方向。Web3D 是指在网页中展示 3D 内容的技术集合。近年来&#xff0c;由于 WebGL、WebGPU 等技术的发展&#xff0c;3D 内容已经能够直接在浏览器中渲染&#xff0c;为用户提供更加沉浸、互动的体验。以…

电科金仓(人大金仓)更新授权文件(致命错误: XX000: License file expired.)

问题:电科金仓(人大金仓)数据库链接异常,重启失败,查看日志如下: 致命错误: XX000: License file expired. 位置: PostmasterMain, postmaster.c:725 解决方法: 一、下载授权文件 根据安装版本在官网下载授权文件(电科金仓-成为世界卓越的数据库产品与服务提供商)…

uniapp的video视频属性打包app后层级过高

问题&#xff1a;在使用uniapp开发APP时&#xff0c;使用video标签显示视频发现H5可以正常展示&#xff0c;但是打包到APP后&#xff0c;它的层级过高&#xff0c;把底部导航都盖住了。 官网说明&#xff1a;uni-app官网 官网给了cover-view组件或plus.nativeObj.view、subNVue…