LeetCode 六大股票问题解法

推荐阅读:股票问题系列通解(转载翻译) 为了更好的理解和记忆,这里给出我重新整理后的解法,每个解法都很相似,只需改动少量的条件 121. 买卖股票的最佳时机 1 public int maxProfit(int[] prices) { 2 int buy = -prices[0]; // 第一天买,减去买的价钱 3 int sale = 0; // 第一天卖,不存在这种情况,没有收益 4 for (int price : prices) { 5 buy = Math.max(buy, -price); // 买,减去买的价钱 6 sale = Math.max(sale, buy + price); // 卖,在买的收益基础上加上卖的价钱 7 } 8 return sale; 9 } 122. 买卖股票的最佳时机 II 1 public int maxProfit(int[] prices) { 2 int buy = -prices[0]; // 第一天买,扣掉买的价钱 3 int sale = 0; // 第一天卖,不存在这种情况,没有收益 4 for (int price : prices) { 5 buy = Math.max(buy, sale - price); // 买,在卖的收益基础上减去买的价钱 6 sale = Math.max(sale, buy + price); // 卖,在买的收益基础上加上卖的价钱 7 } 8 return sale; 9 } 123. 买卖股票的最佳时机 III 1 public int maxProfit(int[] prices) { 2 int buy1 = -prices[0]; // 第一天买,减去买的价钱 3 int sale1 = 0; // 第一天卖,不存在这种情况,没有收益 4 int buy2 = -prices[0]; // 第一天买,减去买的价钱 5 int sale2 = 0; // 第一天卖,不存在这种情况,没有收益 6 for (int price : prices) { 7 buy1 = Math.max(buy1, -price); // 第一次买,减去买的价钱 8 sale1 = Math.max(sale1, buy1 + price); // 第一次卖,在第一次买的收益基础上加上卖的价钱 9 buy2 = Math.max(buy2, sale1 - price); // 第二次买,在第一次卖的收益基础上减去买的价钱 10 sale2 = Math.max(sale2, buy2 + price); // 第二次卖,在第二次买的收益基础上加上卖的价钱 11 } 12 return sale2; 13 } 188. 买卖股票的最佳时机 IV 这是六大问题中最难的一个,所对应的解法是最通用的 ...

2021年11月4日 · 2 分钟 · 982 字

《Java 并发编程的艺术》读书笔记

方鹏飞 魏鹏 程晓明 机械工业出版社 2020 年 12 月第 1 版 第 1 章 并发编程的挑战 (多线程会出现什么问题) 上下文切换过多, 解决: 1) 无锁; 2) CAS; 3) 减少线程; 4) 协程; ...

2021年5月7日 · 6 分钟 · 2530 字

你还在new对象吗?Java8通用Builder了解一下?

程序员经常会遇到灵魂拷问:你有对象吗? 没有,但我可以 new 一个! 1public class GirlFriend { 2 3 private String name; 4 private int age; 5 6 // 省略 getter & setter ... 7 8 public static void main(String[] args) { 9 GirlFriend myGirlFriend = new GirlFriend(); 10 myGirlFriend.setName("小美"); 11 myGirlFriend.setAge(18); 12 } 13} 没问题,老铁!但如果对象的属性太多,咋办? ...

2019年8月30日 · 4 分钟 · 1593 字

Spring Boot中如何干掉if else

前言 看到crossoverJie的文章《利用策略模式优化过多 if else 代码》后受到启发,可以利用策略模式简化过多的if else代码,文章中提到可以通过扫描实现处理器的自注册,我在这里介绍在Spring Boot框架中的实现方法。 ...

2019年2月2日 · 4 分钟 · 1976 字

【Java】使用位运算(&)代替取模运算(%)

介绍 位运算(&)效率要比取模运算(%)高很多,主要原因是位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。 1a % b == a & (b - 1) 前提:b 为 2^n ...

2018年10月11日 · 1 分钟 · 476 字

Spring Boot实现通用的接口参数校验

本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义注解实现通用的接口参数校验。 缘由 目前参数校验常用的方法是在实体类上添加注解,但对于不同的方法,所应用的校验规则也是不一样的,例如有一个AccountVO实体: ...

2018年5月10日 · 3 分钟 · 1486 字

Thrift 连接 Java 与 Python,附 Java 通用工厂方法

Python 作为服务端,Java 作为客户端调用 Python 提供的接口。本文主要按照这篇文章的思路连通 Python 与 Java,下面简单介绍一下如何使用,具体可参看原文章。最后重点提供一个 Java 的通用工厂方法,用来调用 Thrift 提供的接口。 ...

2017年9月22日 · 3 分钟 · 1055 字

Spring Cloud 服务发布与消费

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。 Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。 ...

2017年4月14日 · 6 分钟 · 2592 字

spring-boot 使用JavaConfig方式配置Dubbo

Spring Boot提倡以JavaConfig的方式进行配置,就是使用注释来描述Bean配置的组件,从而取代让许多开发者诟病已久的xml配置方式。Spring Boot官方也提供了很多相关的JavaConfig例子,例如数据库配置,消息队列配置等。本文将提供一个JavaConfig配置Dubbo的例子。 ...

2017年4月14日 · 2 分钟 · 738 字

spring-boot 中文乱码解决拾遗

在spring-boot项目中返回json格式数据时出现中文乱码问题,有以下两种解决方式: 注解形式 在@RequestMapping注解中指定返回格式,编码: ...

2016年7月17日 · 1 分钟 · 295 字