【独家OD2023C卷真题】20天拿下华为OD笔试【不定滑窗】2023C-最大可购买的宝石数量【欧弟算法】全网注释最详细分类最全的华为OD真题题解

题目描述与示例

题目描述

橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],0<=i<nn = gems.length。宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;

例如客户最大购买宝石个数为m,购买的宝石编号必须为gems[i],gems[i+1]...gems[i+m-1](0<=i<n,m<=n)。假设你当前拥有总面值为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类型的返回值,表示最大可购买的宝石数量。

示例一

输入

7
8
4
6
3
1
6
7
10

输出

3

说明

gems = [8,4,6,3,1,6,7], value = 10` 最多购买的宝石为`gems[2]`至`gems[4]`或者`gems[3]`至`gems[5]

示例二

输入

0
1

输出

0

说明

gems = []`,`value = 1` 因为没有宝石,所以返回`0

示例三

输入

9
6
1
3
1
8
9
3
2
4
15

输出

4

说明

gems = [6, 1, 3, 1, 8, 9, 3, 2, 4]`,`value = 15` 最多购买的宝石为`gems[0]`至`gems[3]

示例四

输入

9
1
1
1
1
1
1
1
1
1
10

输出

9

说明

gems = [1, 1, 1, 1, 1, 1, 1, 1, 1], value = 10 最多购买的宝石为gems[0]gems[8],即全部购买

解题思路

由于购买的宝石的下标必须连续,所以题目本质上是要求找到最长的和小于value的连续子数组。由于所有元素均为正整数,所以考虑滑窗而非前缀和求和。直接考虑滑窗三问三答即可。

滑窗三问

Q1:对于每一个右指针right所指的元素num,做什么操作?

Q2:什么时候要令左指针left右移?left对应的元素做什么操作?while中的循环不变量是什么?

Q3:什么时候进行ans的更新?

滑窗三答

A1:将num计入窗口之和win_sum中。

A2win_sum > max_sumwin_sum减去left_numleft右移,直到win_sum <= M成立。

A3:win_sum <= M时,可以更新答案,这个过程发生在将num计入窗口之和win_sum中之后。

代码

Python

# 题目:【不定滑窗】2023C-最大可购买的宝石数量
# 分值:100
# 作者:许老师-闭着眼睛学数理化
# 算法:不定滑窗
# 代码看不懂的地方,请直接在群上提问# 输入宝石数组长度
n = int(input())
nums = list()
# 循环n次,每次循环输入一个数,按顺序存入nums数组中
for _ in range(n):nums.append(int(input()))# 输入子数组的最大和
max_sum = int(input())# 初始化窗口和
win_sum = 0
# 初始化左指针和ans
left, ans = 0, 0# 进行滑窗
for right, num in enumerate(nums):# A1win_sum += num# A3if win_sum <= max_sum:ans = max(ans, right-left+1)# A2while win_sum > max_sum:win_sum -= nums[left]left += 1print(ans)

Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}int maxSum = scanner.nextInt();int windowSum = 0;int left = 0;int ans = 0;for (int right = 0; right < n; right++) {windowSum += nums[right];if (windowSum <= maxSum) {ans = Math.max(ans, right - left + 1);}while (windowSum > maxSum) {windowSum -= nums[left];left++;}}System.out.println(ans);}
}

C++

#include <iostream>
#include <vector>int main() {int n;std::cin >> n;std::vector<int> nums(n);for (int i = 0; i < n; i++) {std::cin >> nums[i];}int maxSum;std::cin >> maxSum;int windowSum = 0;int left = 0;int ans = 0;for (int right = 0; right < n; right++) {windowSum += nums[right];if (windowSum <= maxSum) {ans = std::max(ans, right - left + 1);}while (windowSum > maxSum) {windowSum -= nums[left];left++;}}std::cout << ans << std::endl;return 0;
}

时空复杂度

时间复杂度:O(N)。仅需一次遍历数组nums

空间复杂度:O(1)。仅需若干常数变量。


华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 大厂真题汇总 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

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

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

相关文章

最近数据分析面试的一点感悟...

我是阿粥&#xff0c;也是小z 最近面了不少应届的同学&#xff08;数据分析岗位&#xff09;&#xff0c;颇有感触&#xff0c;与各位分享。 简历可以润色&#xff0c;但要适度 运用一些原则&#xff0c;如STAR法则&#xff0c;让简历逻辑更清晰&#xff0c;条块分明&#xff0…

香港优才计划是什么意思?一文详解2023年最新政策!

香港优才计划是什么意思&#xff1f;一文详解2023年最新政策&#xff01; 目前香港优才计划申请火热&#xff0c;但是还是有很多新手不太了解这个项目&#xff0c;跟风申请绝对不是什么好事&#xff0c;先了解清楚再考虑也是对自己对家人的一种交代。这篇文章就再来科普下。 优…

word、excel文件转PDF(documents4j方式,简单)

1 documents4j方式 引入pom <dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.1.12</version></dependency><dependency><groupId>com.documents4j</g…

WEB渗透—反序列化(六)

Web渗透—反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩哔_…

基于若依的ruoyi-nbcio流程管理系统增加流程节点配置(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 上一节把数据库与相关基础数据字典准备好&#xff0c;下面就来实现相应的功能&#xff0c;目前先针对自定义…

实现了父类 纯虚函数为什么还有 无法解析外部符号错误

使用背景&#xff1a; 将C 的函数或接口使用 pybind11 封装成可以供python 使用调用的接口或函数&#xff0c;使用了CMake 编译&#xff08;若之前可以编译通过&#xff0c;现在编译不通过&#xff0c;重新选择 source code 路径&#xff09;成 VS 2019 可使用的目标解决方案&a…

ThinkPHP6学生选课管理系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP6学生选课管理系统 一 介绍 此学生选课管理系统基于ThinkPHP6框架开发&#xff0c;数据库mysql8&#xff0c;前端bootstrap。系统角色分为学生&#xff0c;教师和管理员。学生登录后可进行选课&#xff0c;教师登录后可查看选课情况…

碧莲盛 x Tapdata:实时数据如何赋能医疗美容行业,助力医疗决策及个性化服务升级

使用 Tapdata&#xff0c;化繁为简&#xff0c;轻量代替 OGG、DSG 这样的同步工具&#xff0c;以及 Kettle、Informatica、Python 这样的 ETL 工具或脚本&#xff0c;帮助企业在五花八门的数据需求面前&#xff0c;实现“做且仅做最后一次 ETL”的目标&#xff0c;这绝非纸上谈…

Win7 SP1 x64 Google Chrome 字体模糊

1 打开 Google Chrome &#xff0c;地址栏输入 chrome://version/ &#xff0c;字体模糊。 2 Microsoft Update Catalog 搜索现在更新 kb2670838 &#xff0c;安装&#xff0c;重启电脑。 3 打开 Google Chrome&#xff0c;地址栏输入 chrome://version/ &#xff0c;字体正常。…

【新手解答4】深入探索 C 语言:全局变量声明、全局函数声明 + 宏定义

C语言的相关问题解答 写在最前面问题一&#xff1a;全局声明全局变量的声明全局函数的声明 问题二&#xff1a;返回值&函数声明函数定义和返回值函数声明和函数体内的声明结论 问题二延伸&#xff1a;优先采用全局声明原因1. 易于维护和查找2. 避免重复声明3. 保持代码的清…

AI生成技术威胁版权保护,水印技术和法律完善是关键/安圭拉小岛以.ai域名注册赚得3000万美元 |魔法半周报​

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 AI生成技术威胁版权保护&#xff0c;水印技术和法律完善是关键 Sam Altman对…

Web 安全之 X-XSS-Protection 详解

目录 什么是 X-XSS-Protection XSS 攻击概述 X-XSS-Protection 的值 工作原理 如何设置 X-XSS-Protection 头 示例说明 X-XSS-Protection 局限性 现代替代方案 小结 什么是 X-XSS-Protection X-XSS-Protection 是一个旨在启用或配置某些版本的 Internet Explorer、C…

1140. 最短网络,prim算法,模板题

1140. 最短网络 - AcWing题库 农夫约翰被选为他们镇的镇长&#xff01; 他其中一个竞选承诺就是在镇上建立起互联网&#xff0c;并连接到所有的农场。 约翰已经给他的农场安排了一条高速的网络线路&#xff0c;他想把这条线路共享给其他农场。 约翰的农场的编号是1&#xf…

webform使用ajax访问后端接口的两种方法

第一种方法&#xff1a;ajax前后端交互&#xff0c;前端使用这种传参方式&#xff1a;JSON.stringify({obj:JSON.stringify(json_obj)})&#xff0c;而后端使用这种接参方式&#xff1a;public static string mymethod(string obj)&#xff0c;注意前后端参数的名称必须相同。 …

记录一次如何查询mysql分库分表数据

一、前言 本次查询是在未知如何分库分表的情况下&#xff0c;对表数据进行查询&#xff0c;其中有的字段为JSON结构。需要提取JSON中某个字段的内容。 二、查询步骤 1、第一方式是将所有分表数据进行union all select * from apporder.ord_shopping_order union all sel…

vue跨域请求

vue.config.js devServer:{proxy:"http://localhost:8081"}main.js中定义 import axios from "axios"; axios&#xff0c; App.vue中引用 <template><Article/> </template><script> import Article from "/components/Ar…

才聚免费为你招聘,用人单位看过来!

才聚团队从1998年开始从事项目管理的推广工作&#xff0c;20多年来培训学员超30万人次&#xff0c;分布全国各地、服务企业超过5000家。拥有大批 PMP &#xff08;项目管理专业人员资格&#xff09; NPDP&#xff08;产品经理国际资格&#xff09; 软考 &#xff08;信息系统…

Python量化--多空策略:使用 Zipline 进行回测

我将向您展示多空策略以及 zipline 回测。这是一个编码教程,我将向您展示整个代码并解释每个单元格的作用。 让我们开始编码: from collections import defaultdict from time import time import warningsimport numpy as np import pandas as pdimport matplotlib.pyplot a…

五丶openlayer之LOD和分辨率

LOD是Levels of Detail的简写&#xff0c;用于根据当前的环境&#xff0c;渲染不同的图像&#xff0c;用于降低非重要的细节度&#xff0c;从而提高渲染效率&#xff0c;在电子游戏中经常运用&#xff0c;对于需要显示全球地图的GIS系统而言&#xff0c;更需要应用这项技术。 …

UE5学习(游戏存档,两种适应性的射线检测,时间膨胀)

游戏存档 0.建立游戏存档类 1.建立存档 命名要用规律&#xff0c;读档时根据命名调用 2.读取存档 这里是用存档时间&#xff08;秒&#xff09;验证是否有存档成功。 两种鼠标位置射线检测方法 两种适用性未使用大量项目验证&#xff0c;为个人观点 1.适用于游戏中 2.适用于…