股票交易类算法

(8-4)Dueling DQN 算法:股票交易策略系统(2) 例如,在一个机器人导航的问题中,环境可能是物理世界,状态是机器人的位置,动作是机器人的移动,奖励可以是到达目标位置的奖励。具体实现代码如下所示。(6)调用函数plot_train_test_by_q,通过传递参数训练集、测试集、训练后的模型 Q 和算法名称 'DQN' ,来绘制基于Q值策略的股票交易情况图,以展示DQN算法在训练集和测试集上的交易表现。(2)调用上面定义的 train_dqn函数,用于训练DQN(Deep Q-Network)智能体,并将训练后的模型、损失记录和奖励记录保存在变量中。 阅读详情

问题1:简单买卖:只允许买卖一次Best Time to Buy and Sell Stock

本题意思就是你得到一系列在接下来几天的股票价格,现在你被允许只用一次交易(就是买进再卖出)来获取最大利益。 

 求一组数中最大差问题(只能是后面的数减前面的数)

转化一下思路,求出两两相邻数的差,求一系列差值的最大连续子序列和,问题就转化为 

Maximum Subarray问题

注意两点:

收益不能为负,所以如果求出来的值小于0,输出0

如果给出的数组只有一个数,也输出0

public int maxProfit(int[] prices) {
        int length = prices.length;
        if(length < 2)return 0;
    	int sum = 0,max = Integer.MIN_VALUE;
    	for(int i =1;i<length;i++){
    	    int diff = prices[i]-prices[i-1];
    	    sum += diff;
    	    if(max < sum)max=sum;
    	    if(sum < 0)sum = 0;
    	}
    	if(max < 0)return 0;
    	return max;
    }

问题2:简单买卖:可以买卖无穷多次

意思是买卖股票时可以不计买卖次数,但是必须在买之前先把以前的股票卖掉。然后求能获利最大的额度。 这样的话也很简单,只要遇见下一天的价格比这一天价格高的话,就卖出。

求所有上升期差价的总和。

public int maxProfit(int[] prices) {
        int length = prices.length;
        int ret = 0;
        for(int i = 0;i<length-1;i++){
            if(prices[i]<prices[i+1]){
               ret +=  (prices[i+1]-prices[i]);
            }
        }
        return ret;
    }

问题3:挑选股票

挑选规则:给定一个股票集合vector<int> stocks,股票编号为1,2,3...,N。挑选规则:

1. 从左往右,第一个开始,每隔一个就删除一个;比如第一次删除的是1,3,5...

2. 从右往左,最后一个开始,每隔一个就删除一个。

重复1,2步骤,直至列表中只剩一只股票。

输入:股票个数N。

输出:最后剩下的那只股票编号。

示例:输入20,输出6。

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;


public class pickStock {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);       
        int n = scan.nextInt();
        List<Boolean> stocks = new ArrayList<>();
        for (int i = 0; i<n; ++i) {
            stocks.add(true);
        }

        while (true) {
            pickLeft(stocks);
            int last = check(stocks);
            if (last != -1) {
                System.out.println(last+1);
                return;
            }
            pickRight(stocks);
            last = check(stocks);
            if (last != -1) {
                System.out.println(last+1);
                return;
            }
        }
    }
    /**
     * 从左往右遍历,奇数未的股票删除(设置为false)
     */
    private static void pickLeft(List<Boolean> stocks) {
        int count = 0;
        for (int i = 0; i<stocks.size(); ++i) {
            if (stocks.get(i)) {
                count++;
            }
            if (count%2 != 0) {
                stocks.set(i, false);
            }
        }
    }

    private static void pickRight(List<Boolean> stocks) {
        int count = 0;
        for (int i = stocks.size()-1; i>=0; --i) {
            if (stocks.get(i)) {
                count++;
            }
            if (count%2 != 0) {
                stocks.set(i, false);
            }
        }
    }

    /**
     * 判断是否是最后一个,如果是,返回下标,否则返回-1
     */
    private static int check(List<Boolean> stocks) {
        int count = 0, last_index = -1;
        for (int i = 0; i<stocks.size(); ++i) {
            if(stocks.get(i)) {
                count++;
                last_index = i;
            }
            if (count > 1) {
                return -1;
            }
        }
        return last_index;
    }
}

python大作业:实现的简易股票简易系统(含源码、说明和运行截图) 阅读详情

相关推荐

保姆级教程:手把手教你用RKISP TURN为RV1106生成和配置IQfile(附AIQ版本匹配避坑指南)

本文提供RV1106 ISP调试的完整指南,详细讲解如何使用RKISP TURN工具生成和配置IQfile,包括环境搭建、参数调试、设备树配置及常见问题解决方案。特别强调AIQ版本匹配的重要性,帮助开发者避免常见陷阱,提升图像信号处理效率。

weixin_42520796的博客 492

1055. 股票买卖 II

题目链接 给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 输入格式 第一行包含整数 NN,表示数组长度。 第二行包含 NN 个不大于 1000010000 的正整数,表示完整的数组。 输出格式 输出一个整数,表示最大利润。 数据范围 1≤N≤1051≤N≤105 输入样例1: 6 7

qq_45804270的博客 598

别再卡在Google验证了!用Header Editor插件5分钟搞定TryHackMe注册(附最新.json规则)

本文提供了使用Header Editor插件快速解决TryHackMe注册时Google验证失败问题的详细指南。通过导入特定的JSON规则文件,用户可以轻松绕过网络限制,5分钟内完成账号注册,无需复杂设置。文章包含完整的配置步骤、常见问题解决方案以及安全使用建议。

weixin_30736301的博客 463

算法——股票买卖问题

含有冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 class Solution { public int maxProfit(int[] prices) { int res = 0; int n = pric

Think Different. 1687

工业相机图像格式深度解析:从Mono8到Mono12的选型与应用

本文深度解析工业相机黑白图像格式,重点对比Mono8、Mono10与Mono12的核心差异。文章从位深、动态范围和数据量等关键概念切入,详细阐述了不同格式的优缺点及适用场景,为工业视觉项目中的相机选型提供实战指南,帮助用户在精度、速度与成本间做出最优决策。

weixin_29207439的博客 262

RagFlow实战:如何用DeepDoc引擎高效处理扫描PDF文档(附完整代码解析)

本文详细解析了如何利用RagFlow的DeepDoc引擎高效处理扫描PDF文档。通过实战演示从环境搭建、PDF预处理、文本检测与识别,到布局分析与表格结构提取的完整流程,并提供了完整的代码实现。该方案超越了传统OCR,能输出保留原始版面信息的结构化数据,为构建高质量知识库提供了强大支持。

weixin_29245767的博客 300

【算法基础】LeetCode股票交易类算法题目总结(一次交易,两次交易,无数次交易)...

大家好,前一段时间的基金市场波动很大啊,也就又诞生了很多“韭菜”,在这里千寻也提醒大家“股市有风险,入市需谨慎”,玩基金一定用不着急用的钱哦~刷算法题目,应该是很多同学的“噩梦”,尤其是非...

fengdu78的博客 3287

SAP成本核算-事中控制(成本对象控制/成本归集与结算)

本文详细介绍了SAP系统中工单成本归集与结算的全流程管理。主要内容包括:1)工单成本三阶段归集(投料、报工、入库)的具体操作与计算方法;2)工单实际成本结算七步骤:从实际费用归集、成本分割、作业价格计算到差异结算的全过程;3)关键注意事项如测试运行验证、价格单位确认、无在制品处理等。通过标准价计算、实际作业重估等机制,系统实现了生产成本从计划到实际的精确核算,最终生成财务所需的差异结算凭证。所有操作均提供单工单和批量处理两种方式,满足不同业务场景需求。

小九啥也不会 1364

算法之股票最佳时机系列问题(一次搞定6道股票问题)

简述 本文旨在总结leetcode中遇到的一系列股票问题,分别详细阐述解决方法和各问题之间的区别。 目录 1. T121 买卖股票的最佳时机 简单 2. T122 买卖股票的最佳时机 II 简单 3. T123 买卖股票的最佳时机 III 困难 4. T188 买卖股票的最佳时机 IV 困难 5. T309 最佳买卖股票时机含冷冻期 中等 6. T714 买卖股票的最佳时机含手续费 中等 以上题目均来自leetcode 题目 ####1. 买卖股票的最佳时机 题目描述 给定一个数组,它的第 i 个元素是

pl0321的博客 1190

基于ADPSS的直驱风电单机模型建模指南:跟网型与构网型

本文介绍了基于ADPSS平台的直驱风电单机建模方法,包含跟网型和构网型两种控制策略。模型采用模块化设计,共享风力机与桨距角控制部分,通过FORTRAN语言实现自定义建模。跟网型采用锁相环同步和矢量控制,构网型则采用虚拟同步机技术模拟同步发电机特性。详细阐述了风力机气动模型、桨距角控制算法及代码实现,为新能源并网仿真提供了实用参考。全文约150字,涵盖模型架构、数学方程和ADPSS实现要点。

huanghm88的专栏 169

TC8:SOMEIPSRV_SD_MESSAGE_07-09

TTL为服务实例的生命周期。在此生命周期之后,不提供服务实例。

jasonj333 908

【算法】买股票系列

leetcode上有【买股票】的题很有意思,基本上也采用动态规划去做,今天总结一下。 在309. 最佳买卖股票时机含冷冻期解答中汇总了题目汇总了所有的买股票问题:力扣 1、121 买股票的最佳时机 链接:力扣 给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润..

StudyWinter的博客 2139

利用 Python 构建高效爬虫爬取国家标准文献——从基础到进阶

然而,由于许多标准文献需要从特定网站获取,手动下载既耗时又低效,因此构建自动化爬虫成为一种实用且高效的解决方案。本文从技术选型、网站分析、代码实现到反爬优化,全面讲解了如何爬取国家标准文献。国家标准文献(National Standards Literature)是国家对各领域统一规范的文件,涵盖了技术参数、测试方法、生产工艺等内容。因此,通过自动化爬虫技术进行文献爬取和管理,不仅能解放劳动力,还可以提高数据管理效率。在构建爬虫前,我们需要对目标网站进行分析,包括页面结构、请求方式以及可能的反爬机制。

2201_76125261的博客 2105

leetcode 123 买卖股票的最佳时机III(2笔交易)

class Solution { public int maxProfit(int[] prices) { if (prices.length <= 0) { return 0; } //进行初始化,第一天 s1 将股票买入,其他状态全部初始化为最小值 int s1 = -pric...

赵智任的博客 157

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java 贪心算法

不验证贪心策略直接写代码很多问题局部最优无法推全局,例如 01 背包用贪心直接出错,必须先举反例验证。区间排序规则选错求最多不重叠区间按右端点;区间覆盖按左端点;排序规则错答案完全错误。双向约束只用一次贪心分发糖果、排队打水这类左右互相影响的题目,单次遍历无法满足条件,需要两次扫描。数值边界忽略负数、极值K 次取反、加油站题目容易忽略全负数、总和不足边界。跳跃游戏混淆可达性与最小步数55 题只维护最远可达;45 题需要记录起跳边界,两套逻辑不能混用。分配入门:分发饼干、柠檬水找零(建立贪心直觉)

zgzldnr的博客 896

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Leetcode-交易逆序对的总数

交易中的逆序对为 (9, 7), (9, 5), (9, 4), (9, 6), (7, 5), (7, 4), (7, 6), (5, 4)。在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。在进行merge过程中,如果右边排好序数组的数小于左边排好序数组的数,右边数组当前数p2产生的逆序对为p1到mid的数量。注意:如果record[p1]=record[p2],优先放入record[p1]到 help[i++]中。思路:使用归并排序解决。

qq_45800511的博客 625

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Best Time to Buy and Sell Stock II

class Solution { public: int maxProfit(vector &prices) { // Start typing your C/C++ solution below // DO NOT write int main() function int p = 0; for(int i = 1; i

systemboot的专栏 392

力扣60天打卡(第5天)

给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。 返回你能获得的最大利润。

qq_71356343的博客 248

LeetCode 买卖股票的最佳时机系列 121. 122. 123. 188. 309. 714

LeetCode股票买卖系列题解

vcj1009784814的博客 201

LeetCode-Best Time to Buy and Sell Stock II

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one ...

weixin_30273175的博客 72

Leetcode:714. Best Time to Buy and Sell Stock with Transaction Fee

c++:class Solution { public: int maxProfit(vector<int>& prices, int fee) { int len = prices.size(); vector<int> maxProfit(len), cashWhenHoldOne(len); maxProfit[0] = 0, cashW

lyy_g的博客 257

【714. 买卖股票的最佳时机含手续费】

714. 买卖股票的最佳时机含手续费

qq_69544758的博客 256

LeetCode OJ 系列之122 Best Time to Buy and Sell Stock II --Python

Problem: Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you li

ln152315的专栏 484

代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。跳几步无所谓,得看跳跃的覆盖范围,看跳跃的覆盖范围能不能到终点。你的目标是使用最少的跳跃次数到达数组的最后一个位置。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。股票的总利润是每日利润的总和。最小的步数得到最大的跳跃范围。

m0_63255131的博客 343

算法题目 股票交易系列

目录只能进行一次的股票交易可以进行无限次的股票交易只能进行两次的股票交易可以进行K次的股票交易需要冷冻期的股票交易需要交易费用的股票交易 只能进行一次的股票交易 leetcode 121 买卖股票的最佳时机(简单) 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票...

coding 3127

买卖股票的最佳时机 II(贪心思想)

问题: 算法复杂度o(n) class Solution { public: int maxProfit(vector<int>& prices) { int cnt = prices.size(); int maxm=0; for(int i=1;i<cnt;i++){ int diff = prices[i]-prices[i-1]; maxm = max(m.

qq2474842866的博客 133
上一篇: Longest Substring Without Repeating Characters
下一篇: Java容器类常用方法总结
okiwilldoit
博客等级 码龄17年 86粉丝 283原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值