java编程:数组代表着苹果期货在 9 天内的价格变化,其中第 n 个元素是苹果在第 n 天的 价格,你可以进行最多三次交易,设计算法,9 天内赚到最多的钱

1 题目

编程题:下面的数组代表着苹果期货在 9 天内的价格变化,其中第 n 个元素是苹果在第 n 天的
价格,你可以进行最多三次交易,设计一个算法,9 天内如何赚到最多的钱?价格数组: [8, 9, 2, 5,
4, 7, 1, 3, 6]
提醒:
1.一天内多次买入卖出,等同于不赚不赔,但消耗次数;
2.交易差价越大,赚的钱越多;
每次只能交易一次,下一次买入卖出必须在上一次交易之后;

2 解题思路

 这个问题可以通过动态规划来解决。我们可以定义一个数组dp,其中dp[i]表示在i天内最多进行三次交易所能获得的最大利润。状态转移方程可以定义为:dp[i] = max(dp[i-1], dp[i-2] + prices[i] - prices[i-2], dp[i-3] + prices[i] - prices[i-3])其中,dp[i-1]表示在i-1天内最多进行三次交易的最大利润,dp[i-2] + prices[i] - prices[i-2]表示在i-2天进行一次交易,然后在i天进行一次交易的最大利润,dp[i-3] + prices[i] - prices[i-3]表示在i-3天进行一次交易,然后在i天进行一次交易的最大利润。

3 编程实现

package com.test;public class Test {public static void main(String[] args) {int[] prices = {8, 9, 2, 5, 4, 7, 1, 3, 6};int maxProfit = maxProfit(prices);System.out.println(maxProfit);}public static int maxProfit(int[] prices) {int n = prices.length;int[] dp = new int[n];dp[0] = 0;dp[1] = 0;dp[2] = prices[1] - prices[0];for (int i = 3; i < n; i++) {dp[i]=getMaxOfThreeNum(dp[i - 1], dp[i - 2] + prices[i] - prices[i - 2], dp[i - 3] + prices[i] - prices[i - 3]);}return dp[n-1];}/***  求三个数中的最大值* @param a* @param b* @param c* @return a b c 中的最大值*/public static int getMaxOfThreeNum(int a,int b,int c){if(a > b){if(a > c){return a;}else{return c;}}else{if( b > c){return b;}else{return c;}}}
}

4 运行结果

在这里插入图片描述

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

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

相关文章

面试必须要知道的MySQL知识--索引

10 索引 10.1 数据页存储结构 10.1.1 数据页的各个部分 在讲索引之前&#xff0c;让我们看看一个单独的数据页是什么样子的 去除掉一些我们不太需要那么关注的部分后&#xff0c;简化如下&#xff1a; 也就是说平时我们在一个表里插入的一行一行的数据会存储在数据页里&#…

Blender学习笔记:小车狂奔动画

文章目录 路旁小树汽车尾气移动 教程地址&#xff1a;八个案例教程带你从0到1入门blender【已完结】 小车建模 路旁小树 1 添加摄像机&#xff0c;在小车下面拉一个平面&#xff0c;覆盖到摄像机的观察视窗。复制一层平面&#xff0c;收窄变成小车两侧的路面&#xff0c;编辑…

VAE模型及pytorch实现

VAE模型及pytorch实现 VAE模型推导部分最小化KL散度推导代码部分损失函数Encoder部分Decoder部分VAE整体架构 VAE问题参考资料 VAE&#xff08;变分自编码器&#xff09;是一种生成模型&#xff0c;结合了自编码器和概率图模型的思想。它通过学习数据的潜在分布&#xff0c;可以…

Python面试破解:return和yield的细腻差别

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python面试破解&#xff1a;return和yield的细腻差别&#xff0c;全文3000字&#xff0c;阅读大约10钟。 在Python的函数编程中&#xff0c;return和yield是两个常用的关键词…

居家适老化设计第三十四条---卫生间之照明

居家适老化卫生间照明设计需要考虑以下几个方面&#xff1a;1. 光源选择&#xff1a;选择适合老年人眼睛的柔和光源&#xff0c;避免刺眼和眩光的发生。可以选择LED灯具&#xff0c;因为它们具有节能、寿命长和可调光的特点。2. 光线布置&#xff1a;在不同区域设置不同的光线&…

Redis深入理解-主从架构下内核数据结构、主从同步以及主节点选举

Redis 主从挂载后的内核数据结构分析 主节点中&#xff0c;会通过 clusteNode 中的 slaves 来记录该主节点包含了哪些从节点&#xff0c;这个 slaves 是一个指向 *clusterNode[] 数组的数据结构从节点中&#xff0c;会通过 clusterNode 中的 slaveof 来记录该从节点属于哪个主…

vue3中的Fragment、Teleport、Suspense新组件

Fragment组件 在Vue2中: 组件必须有一个根标签 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中 好处: 减少标签层级, 减小内存占用 <template><div style"font-size: 14px;"><p> 组件可以没有根标签</p&g…

【JUC】十四、synchronized进阶

文章目录 1、synchronized2、synchronized与monitor3、管程Monitor4、Q&#xff1a;为什么每个Java对象都可以成为一个锁&#xff1f;5、小结 1、synchronized 写个demo&#xff0c;具体演示下对象锁与类锁&#xff0c;以及synchronized同步下的几种情况练习分析。demo里有资源…

Notion for Mac:打造您的专属多功能办公笔记软件

在如今这个信息爆炸的时代&#xff0c;一款高效、便捷的笔记软件对于办公人士来说已经成为必不可少的工具。Notion for Mac&#xff0c;作为一款多功能办公笔记软件&#xff0c;凭借其简洁优雅的界面、强大的功能以及无缝的云端同步&#xff0c;成为了众多用户的首选。 一、多…

LD_PRELOAD劫持

LD_PRELOAD劫持 <1> LD_PRELOAD简介 LD_PRELOAD 是linux下的一个环境变量。用于动态链接库的加载&#xff0c;在动态链接库的过程中他的优先级是最高的。类似于 .user.ini 中的 auto_prepend_file&#xff0c;那么我们就可以在自己定义的动态链接库中装入恶意函数。 也…

Redis基本操作及使用

&#x1f4d1;前言 本文主要是【Redis】——Redis基本操作及使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一…

Spring Boot 3 + Spring Security 6 最新版本修改 Json 登录后 RememberMe 功能问题失效的解决方案

当 Spring Boot 版本更新到 3 之后&#xff0c;最低要求的 JDK 版本变为 17&#xff0c;相应的 最新版本的 Spring Security 的配置也发生了变化&#xff0c;一下主要讲解一些新的 Spring Security 的配置方法 1. 配置由继承WebSeucrityConfigurerAdapter变成只需添加一个Secur…