题目描述:

给定一个数组,它的第 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)针对数组的峰值和谷底的操作相关推荐

  1. [Swift]LeetCode188. 买卖股票的最佳时机 IV | Best Time to Buy and Sell Stock IV

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. 炒股Java_基于java计算买卖股票的最佳时机

    这篇文章主要介绍了基于java计算买卖股票的最佳时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题: 可以将问题转化为如下图所示,即求多个累计 ...

  3. 算法训练Day49 | Leetcode121. 买卖股票的最佳时机(只能买卖一次);LeetCode122. 买卖股票的最佳时机II(可以买卖多次)

    目录 Leetcode121. 买卖股票的最佳时机 方法一:暴力解法 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考与收获 方法二:贪心算法 1. 思路 2. 代码实现 3. 复杂度分析 方 ...

  4. 力扣贪心算法专题(一)455.分发饼干 376. 摆动序列 53. 最大子序和 122.买卖股票的最佳时机II 1005.K次取反后最大化的数组和 思路及C++实现 贪心算法 动态规划

    文章目录 贪心算法 455.分发饼干 思路 步骤 代码 376. 摆动序列 贪心算法 思路 分析 代码 动态规划 思路 步骤 代码 53. 最大子序和 暴力解法 双层for循环 贪心算法 思路 分析 ...

  5. 【Java力扣算法】LeetCode 309 Best Time to Buy and Sell Stock with Cooldown(动态规划)

    题目: 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .​ 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交 ...

  6. Leetcode-121. 买卖股票的最佳时机

    题目链接 121.买股票的的最佳时机 题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最 ...

  7. leetcode--121. 买卖股票的最佳时机

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...

  8. leetcode121买卖股票的最佳时机

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...

  9. 动态规划--Leetcode121.买卖股票的最佳时机

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...

最新文章

  1. 什么是生存分析(survival analysis)?
  2. webpack中loader加载器配置postCss自动添加CSS兼容前缀
  3. Jmeter连接mysql报Cannot create PoolableConnectionFactory (Communications link failureThe last packet
  4. iOS如何随意的穿插跳跃,push来pop去
  5. Excel 2007 的重大bug
  6. jQuery构建路由
  7. LeetCode14 Longest Common Prefix
  8. nssl1437-逮虾户【二分答案】
  9. WordPress作品设计素材图片站资讯文章教程uigreat主题
  10. 被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?
  11. 递归函数与二分查找算法
  12. 二叉树前中后序遍历【非递归】
  13. Tempo数据分析平台,助力企业高效完成数据预处理工作
  14. 微软官方建议的28条代码优化方案
  15. 红尘阡陌,那抹温暖的烟火
  16. Navicat 中mysql查询使用占位符
  17. OpenCV学习笔记5
  18. 如何正确高效使用搜索引擎
  19. 2022电工(初级)考试试题及答案
  20. 赵小楼:《天道》《遥远的救世主》深度解析(18)细说丁元英中止私募基金的必然性

热门文章

  1. 新手要学会做网站要多长时间?
  2. 智能驾驶之技术概念综述
  3. 最新研究表明人类的智力正在退化
  4. 自己动手写word2vec (四):CBOW和skip-gram模型
  5. 【学习笔记】《如何构建敏捷项目管理团队》第四章 改变自己的风格
  6. C语言读取文件函数:fgets(); fgetc()
  7. 文案再这么玩 非玩死文案不可!
  8. cygwin生成so
  9. 失联修复:让“躲猫猫”无处可藏
  10. 判断piv_str1是否包含在piv_str2中,成功返回值大于1,失败返回0