最大花费金额 - 华为OD统一考试

OD统一考试

题解: Java / Python / C++

alt

题目描述

双十一众多商品进行打折销售,小明想购买自己心仪的一些物品,但由于受购买资金限制,所以他决定从众多心仪商品中购买三件,而且想尽可能的花完资金现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额。

输入描述

第一行为一维整型数组M,数组长度Q小于100,数组元素记录单个商品的价格,单个商品价格小于1000。

第二行为购买资金的额度R,R小于100000。

输出描述

输出为满足上述条件的最大花费额度

如果不存在满足上述条件的商品,请返回-1。

示例1

输入:
23,26,36,27
78输出:
76说明:
金额23、26和27相加得到76,而且最接近且小于输入金额78。

示例2

输入:
10,2,3,4,5,6,7,30
20输出:
20

题解

解题思路:

该问题可以通过排序数组,然后使用双指针二分查找的方法来求解。首先,对商品价格进行排序。然后,使用两个循环遍历可能的商品组合(三个商品),并使用二分查找找到第三个商品,使得总花费最接近但不超过购买资金限制。

时间复杂度: 两个循环的嵌套加二分总体时间复杂度为 O(n^2 log n)。

Java

import java.util.Arrays;
import java.util.Scanner;
/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取输入数组String[] pricesString = scanner.nextLine().split(",");int[] prices = Arrays.stream(pricesString).mapToInt(Integer::parseInt).toArray();// 读取输入的 Rint R = Integer.parseInt(scanner.nextLine());// 排序数组Arrays.sort(prices);int n = prices.length, maxCost = -1;// 遍历组合for (int i = 0; i < n - 2; i++) {for (int j = i + 1; j < n - 1; j++) {int cost = prices[i] + prices[j];if (cost + prices[j + 1] > R) {break;}// 二分查找int left = j + 1, right = n;while (left + 1 < right) {int mid = (right + left) / 2;if (cost + prices[mid] <= R) {left = mid;} else {right = mid;}}// 更新最大花费maxCost = Math.max(maxCost, cost + prices[left]);}}System.out.println(maxCost);}
}

Python

prices = list(map(int, input().split(",")))
R = int(input())prices.sort()
n = len(prices)max_cost = -1
for i in range(n-2):for j in range(i + 1, n - 1):cost = prices[i] + prices[j]if cost + prices[j + 1] > R:  # 超过资金预算break# 二分尝试找到资金范围内最大的第三件商品left, right = j + 1, nwhile left + 1 < right:mid = (right + left) // 2if cost + prices[mid] <= R:left = midelse:right = mid# 购买 [i, j, left] 三件商品max_cost = max(max_cost, cost + prices[left])
print(max_cost)

C++

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main() {// 输入价格列表, 资金预算vector<int> prices;int price, R;while (cin >> price) {prices.push_back(price);if(cin.peek() == ',') {cin.ignore();} else {cin >> R;break;}}// 对价格进行排序sort(prices.begin(), prices.end());int n = prices.size();int max_cost = -1;for (int i = 0; i < n - 2; ++i) {for (int j = i + 1; j < n - 1; ++j) {int cost = prices[i] + prices[j];if (cost + prices[j + 1] > R) {break;}// 二分尝试找到资金范围内最大的第三件商品int left = j + 1, right = n;while (left + 1 < right) {int mid = (right + left) / 2;if (cost + prices[mid] <= R) {left = mid;} else {right = mid;}}// 购买 [i, j, left] 三件商品max_cost = max(max_cost, cost + prices[left]);}}cout << max_cost << endl;return 0;
}

相关练习题

题号题目难易
LeetCode 167167. 两数之和 II - 输入有序数组中等
LeetCode 209209. 长度最小的子数组中等
LeetCode 17931793. 好子数组的最大分数困难

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

(2023,提示扩展,图像反演,文本到文本生成)自适应文本到图像生成的提示扩展

Prompt Expansion for Adaptive Text-to-Image Generation 公众&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 3. 提示扩展数据集 3.1 图像审美数据集 3.2 图像到文本反演 3.3 查…

【数据结构与算法】字符串匹配(头歌习题)【合集】

目录 第1关&#xff1a;实现朴素的字符串匹配任务描述相关知识编程要求评测说明完整代码 第2关&#xff1a;实现KMP字符串匹配任务描述相关知识编程要求评测说明完整代码 第3关&#xff1a;【模板】KMP算法任务描述相关知识C STL容器string1、string的定义2、string中内容的访问…

使用YOLOv8和Grad-CAM技术生成图像热图

目录 yolov8导航 YOLOv8&#xff08;附带各种任务详细说明链接&#xff09; 概述 环境准备 代码解读 导入库 定义letterbox函数 调整尺寸和比例 计算填充 应用填充 yolov8_heatmap类定义和初始化 后处理函数 绘制检测结果 类的调用函数 热图生成细节 参数解释 we…

C++初阶——基础知识(函数重载与引用)

目录 1.命名冲突 2.命名空间 3.缺省参数 4.函数重载 1.函数重载的特点包括&#xff1a; 2.函数重载的好处包括&#xff1a; 3.引用 引用的特点包括 引用的主要用途包括 引用和指针 引用 指针 类域 命名空间域 局部域 全局域 第一个关键字 命名冲突 同一个项目之间冲…

sklearn 中matplotlib编制图表

代码 # 导入pandas库&#xff0c;并为其设置别名pd import pandas as pd import matplotlib.pyplot as plt# 使用pandas的read_csv函数读取名为iris.csv的文件&#xff0c;将数据存储在iris_data变量中 iris_data pd.read_csv(data/iris.txt,sep\t)# 使用groupby方法按照&quo…

期权二叉树估值与图计算

传统期权二叉树的算法都是基于数组的&#xff0c;对于没有编程基础的人来说非常不直观。二叉树是一种特殊的图&#xff0c;可以用python networkx这个图算法库实现&#xff0c;这个库不仅包含常用的图算法&#xff0c;还包含简单的绘图功能&#xff0c;非常适合研究分析使用。 …

【ARMv8M Cortex-M33 系列 2.1 -- Cortex-M33 使用 .hex /.srec 文件介绍】

请阅读【嵌入式开发学习必备专栏 之Cortex-M33 专栏】 文章目录 HEX 文件介绍英特尔十六进制文件格式记录类型hex 示例Cortex-M 系列hex 文件的使用 hex 文件和srec 文件生成Motorola S-Record (srec) 格式 HEX 文件介绍 .hex 文件通常用于微控制器编程&#xff0c;包括 ARM C…

TypeError: control character ‘delimiter‘ cannot be a newline (`\r` or `\n`)

报错 找到错误代码 这个错误是因为在使用 numpy.loadtxt() 函数时尝试将换行符&#xff08;\n&#xff09;作为分隔符&#xff08;delimiter&#xff09;。然而&#xff0c;换行符是用于标识文本文件中每一行的结束&#xff0c;而不是用于分隔数据字段。 解决 如果你的数据文…

c++ OpenCV4图像处理与视频分析实战教程 -> 自建代码库

OpenCV4图像处理与视频分析实战教程&#xff0c;系列视频自建代码库。C版本。 视频可B站搜索。 简介&#xff1a; 网上流传的“OpenCV4图像处理与视频分析实战”课程附带资料需要解压密码&#xff0c;无法使用&#xff0c;且原视频购买很贵&#xff08;51CTO售价119&#xff0…

在Mac上恢复SD卡数据的 6 个有效应用程序

慌&#xff01;SD卡里的照片和视频不小心删了&#xff0c;Mac设备上还恢复不了数据&#xff01; 遇到这种情况&#xff0c;你需要的是一款可靠的Mac适用的SD卡恢复软件。我们为你准备了一份最佳的SD卡恢复软件列表&#xff0c;并且还有详细的评论。另外&#xff0c;我们还会给…

用通俗易懂的方式讲解大模型:LangChain Agent 原理解析

LangChain 是一个基于 LLM&#xff08;大型语言模型&#xff09;的编程框架&#xff0c;旨在帮助开发人员使用 LLM 构建端到端的应用程序。它提供了一套工具、组件和接口&#xff0c;可以简化创建由 LLM 和聊天模型提供支持的应用程序的过程。 LangChain 由几大组件构成&#…

k8s搭建(五、k8s可视化管理工具Dashboard配置)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…