(java)leetcode121 买卖股票的最佳时机1(Best Time to Buy and Sell Stock)针对数组的峰值和谷底的操作
题目描述:
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
示例1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
示例2:
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
解题思路:
这题的实质是,在数组中找到两个差值最大的数,并且数值较大的数在数值较小的数后面。我一开想到的是双层循环,对每一个数,去计算它后面的每一个数减去它的差值,找到最大的那一个,这肯定不是一个最优的解法。后来在解决方案中看到另外一种解法,他的做法是一次遍历,首先去每次取出一个点,判断是否小于最小价格,如若小于,则将最小价格变更为它,然后判断这个点减去最小价格后的利润值是多少,若大于之前的最大利润,则将值保存下来,这样总能保正我的卖出价格是在买进价格之前。
代码实现:
方法一:
class Solution {public int maxProfit(int[] prices) {//遍历数组即可解决int max=0;for(int i=0;i<prices.length;i++){for(int j=i+1;j<prices.length;j++){int profit=prices[j]-prices[i];if(profit>max){max=profit;}}}return max;}
}
方法二:
public class Solution {public int maxProfit(int prices[]) {int minprice = Integer.MAX_VALUE;int maxprofit = 0;for (int i = 0; i < prices.length; i++) {if (prices[i] < minprice)minprice = prices[i];else if (prices[i] - minprice > maxprofit)maxprofit = prices[i] - minprice;}return maxprofit;}
}
每次只能想到暴力法,唉。
(java)leetcode121 买卖股票的最佳时机1(Best Time to Buy and Sell Stock)针对数组的峰值和谷底的操作相关推荐
- [Swift]LeetCode188. 买卖股票的最佳时机 IV | Best Time to Buy and Sell Stock IV
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- 炒股Java_基于java计算买卖股票的最佳时机
这篇文章主要介绍了基于java计算买卖股票的最佳时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题: 可以将问题转化为如下图所示,即求多个累计 ...
- 算法训练Day49 | Leetcode121. 买卖股票的最佳时机(只能买卖一次);LeetCode122. 买卖股票的最佳时机II(可以买卖多次)
目录 Leetcode121. 买卖股票的最佳时机 方法一:暴力解法 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考与收获 方法二:贪心算法 1. 思路 2. 代码实现 3. 复杂度分析 方 ...
- 力扣贪心算法专题(一)455.分发饼干 376. 摆动序列 53. 最大子序和 122.买卖股票的最佳时机II 1005.K次取反后最大化的数组和 思路及C++实现 贪心算法 动态规划
文章目录 贪心算法 455.分发饼干 思路 步骤 代码 376. 摆动序列 贪心算法 思路 分析 代码 动态规划 思路 步骤 代码 53. 最大子序和 暴力解法 双层for循环 贪心算法 思路 分析 ...
- 【Java力扣算法】LeetCode 309 Best Time to Buy and Sell Stock with Cooldown(动态规划)
题目: 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交 ...
- Leetcode-121. 买卖股票的最佳时机
题目链接 121.买股票的的最佳时机 题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最 ...
- leetcode--121. 买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...
- leetcode121买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...
- 动态规划--Leetcode121.买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...
最新文章
- 什么是生存分析(survival analysis)?
- webpack中loader加载器配置postCss自动添加CSS兼容前缀
- Jmeter连接mysql报Cannot create PoolableConnectionFactory (Communications link failureThe last packet
- iOS如何随意的穿插跳跃,push来pop去
- Excel 2007 的重大bug
- jQuery构建路由
- LeetCode14 Longest Common Prefix
- nssl1437-逮虾户【二分答案】
- WordPress作品设计素材图片站资讯文章教程uigreat主题
- 被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?
- 递归函数与二分查找算法
- 二叉树前中后序遍历【非递归】
- Tempo数据分析平台,助力企业高效完成数据预处理工作
- 微软官方建议的28条代码优化方案
- 红尘阡陌,那抹温暖的烟火
- Navicat 中mysql查询使用占位符
- OpenCV学习笔记5
- 如何正确高效使用搜索引擎
- 2022电工(初级)考试试题及答案
- 赵小楼:《天道》《遥远的救世主》深度解析(18)细说丁元英中止私募基金的必然性