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

华为OD机试 - 连续天数的最高利润额 - 动态规划(Python/JS/C/C++ 2024 C卷 100分)

在这里插入图片描述

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

专栏导读

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

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

一、题目描述

公司每日盈利的利润额记于整数数组 profit,请返回连续一或多天利润额总和的最高值。

二、输入描述

第一行为一个整数,表示天数

第二行为整数列表,分别为每日的利润。

三、输出描述

输出整数,表示连续天数利润额总和的最高值。

1、输入

4
2 3 -5 4

2、输出

5

3、说明

"2 3”连续2天的利润总额总和为最高值,连续利润额为5。

四、测试用例

1、输入

10
2 3 -5 4 2 0 0 1 -2 8

2、输出

13

五、解题思路

这道题的目的是在给定的利润数组中,找到连续子数组的最大和,要解决这个问题,我们可以采用动态规划的思想。

最大连续子数组和问题可以被分解为若干子问题。具体来说,求解以第 i 个元素结尾的最大子数组和,依赖于求解以第 i-1 个元素结尾的最大子数组和。

这种重叠子问题的性质使得动态规划成为一种非常合适的解题方法,因为动态规划能够通过记住(缓存)子问题的结果来避免重复计算。

  1. 读取输入的天数和每日的利润数组。
  2. 初始化 maxEndingHere 和 maxSoFar 为利润数组的第一个元素。
  3. 通过迭代数组,从第二个元素开始,逐步更新 maxEndingHere 和 maxSoFar。
  4. 最终,maxSoFar 即为最大连续利润和。

复杂度分析

时间复杂度: O(n),其中 n 是利润数组的长度。算法只需一次遍历数组,因此时间复杂度为线性。

空间复杂度: O(1),只使用了固定数量的额外空间(maxEndingHere 和 maxSoFar),空间复杂度为常数。

六、Python算法源码

def find_max_profit(profit):# 初始化 maxEndingHere 和 maxSoFar 为利润数组的第一个元素max_ending_here = profit[0]max_so_far = profit[0]# 遍历利润数组,从第二个元素开始for i in range(1, len(profit)):# 更新 maxEndingHeremax_ending_here = max(profit[i], max_ending_here + profit[i])# 更新 maxSoFarmax_so_far = max(max_so_far, max_ending_here)return max_so_far# 读取天数
days = int(input())
# 读取每日利润
profit = list(map(int, input().split()))# 输出结果
print(find_max_profit(profit))

七、JavaScript算法源码

function findMaxProfit(profit) {// 初始化 maxEndingHere 和 maxSoFar 为利润数组的第一个元素let maxEndingHere = profit[0];let maxSoFar = profit[0];// 遍历利润数组,从第二个元素开始for (let i = 1; i < profit.length; i++) {// 更新 maxEndingHeremaxEndingHere = Math.max(profit[i], maxEndingHere + profit[i]);// 更新 maxSoFarmaxSoFar = Math.max(maxSoFar, maxEndingHere);}return maxSoFar;
}// 读取天数
let days = parseInt(prompt());
let profit = prompt().split(" ").map(Number);// 输出结果
console.log(findMaxProfit(profit));

八、C算法源码

#include <stdio.h>int find_max_profit(int profit[], int days) {// 初始化 maxEndingHere 和 maxSoFar 为利润数组的第一个元素int max_ending_here = profit[0];int max_so_far = profit[0];// 遍历利润数组,从第二个元素开始for (int i = 1; i < days; i++) {// 更新 maxEndingHeremax_ending_here = (profit[i] > max_ending_here + profit[i]) ? profit[i] : max_ending_here + profit[i];// 更新 maxSoFarif (max_ending_here > max_so_far) {max_so_far = max_ending_here;}}return max_so_far;
}int main() {int days;// 读取天数scanf("%d", &days);int profit[days];// 读取每日利润for (int i = 0; i < days; i++) {scanf("%d", &profit[i]);}// 输出结果printf("%d\n", find_max_profit(profit, days));return 0;
}

九、C++算法源码

#include <iostream>
#include <vector>
using namespace std;int findMaxProfit(const vector<int>& profit) {// 初始化 maxEndingHere 和 maxSoFar 为利润数组的第一个元素int maxEndingHere = profit[0];int maxSoFar = profit[0];// 遍历利润数组,从第二个元素开始for (size_t i = 1; i < profit.size(); i++) {// 更新 maxEndingHeremaxEndingHere = max(profit[i], maxEndingHere + profit[i]);// 更新 maxSoFarmaxSoFar = max(maxSoFar, maxEndingHere);}return maxSoFar;
}int main() {int days;// 读取天数cin >> days;vector<int> profit(days);// 读取每日利润for (int i = 0; i < days; i++) {cin >> profit[i];}// 输出结果cout << findMaxProfit(profit) << endl;return 0;
}

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

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

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

在这里插入图片描述


http://www.mrgr.cn/news/65158.html

相关文章:

  • CentOS 7 安装 ntp,自动校准系统时间
  • 【Linux探索学习】第十弹——Linux工具篇(五):详解Linux 中 Git 工具的使用与相关知识点
  • Docker篇(容器的备份与迁移)
  • git入门教程9:配置Git钩子
  • RV1126-SDK学习之OSD实现原理
  • css实现边框双色凹凸半圆
  • R 语言科研配色 --- 第 9 期
  • 循环
  • 三大细分领域入选,九州未来再登2024边缘计算产业图谱
  • ​​​​​​​PHP类型比较
  • SAP ABAP开发学习——接口中间件(PI)
  • 初步学习【因果推断】
  • 【C++】如何让C++字符串更快、C++的小字符串优化
  • 「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
  • 「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目
  • Hyper-V 安装 KylinOS V10【图文教程】
  • [SpringStack] 快速登录-9分钟给你站点接入Github登录
  • 华为OD机试 - 第 K 个字母在原来字符串的索引(Java 2024 E卷 100分)
  • grpc 云原生 概念介绍
  • 2024 CSS保姆级教程 - BFC详解
  • PostgreSQL 安装 POSTGRES_FDW
  • pcdn的成本构成(壹)
  • CentOS 7 安装 ntp,自动校准系统时间
  • Python编程风格:使用语义更加明确的方法
  • 数据库基础(1) . 关系型数据库
  • 在 Vision Pro 上打造成功的沉浸式叙述应用:探索极致交互体验