算法编程(五):买卖股票的最佳时机

简介: 算法编程(五):买卖股票的最佳时机

写在前面


今天我们继续来解答一道难度定义为简单的LeetCode算法题:买卖股票的最佳时机。

image.png

题目解读


从题目的标题来看,很有吸引力的一道题。

从题目的具体描述中来看,我们需要判断出一个数组中间断性最大的数值结果。

其实这种类型的题目,一般都可以通过暴力循环的方式来得出每一个结果后,再逐一进行比较,最后得到正确结果。

但是在leetcode中好像不太行,因为报错了。

所以只能另外用一个方法,那就是从一开始就算,经历单次循环后,将最小值得出即可。

这里需要赋上一个初始值,这个初始值最大可以设置成10001,因为题目中给出的提示:数组元素的数值范围在1到10000之间。

代码实现


第一次使用的是暴力循环的方式,结果提交直接报了提交超出时间限制。

代码如下:

public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.maxProfit(new int[]{7,1,5,3,6,4}));
    }
    public int maxProfit(int[] prices) {
        int result = 0;
        for (int i = 0; i < prices.length - 1; i++) {
            for (int j = i + 1; j < prices.length; j++) {
                int profit = prices[j] - prices[i];
                if (profit > result) {
                    result = profit;
                }
            }
        }
        return result;
    }
}

第一次执行结果:


image.png

再次提交了一版,让这个世界不再暴力。

public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.maxProfit(new int[]{7,1,5,3,6,4}));
    }
    public int maxProfit(int[] prices) {
        int min = 10001;
        int max = 0;
        for (int price : prices) {
            if (price < min) {
                min = price;
            } else if (price - min > max) {
                max = price - min;
            }
        }
        return max;
    }
}

第二次执行结果:


这次的运行结果就很不错了,速度还不错的。

image.png

总结


今天的这道题,主要是要多组排列组合才能得到正确的结果,理解了其中的规律就很轻松了。

相关文章
|
8天前
|
人工智能 算法 搜索推荐
Java算法编程详解和程序实例
Java算法编程详解和程序实例
14 0
|
19天前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
21天前
|
机器学习/深度学习 算法 搜索推荐
编程之舞:探索算法的优雅与力量
【6月更文挑战第10天】在软件的世界里,算法是构筑数字宇宙的基石。它们如同精心编排的舞蹈,每一个步骤都充满着逻辑的美感和解决问题的力量。本文将带领读者走进算法的世界,一起感受那些精妙绝伦的编程思想如何转化为解决现实问题的钥匙。
17 3
|
22天前
|
算法 安全 数据挖掘
解锁编程之门:数论在算法与加密中的实用应用
解锁编程之门:数论在算法与加密中的实用应用
|
2月前
|
数据采集 监控 算法
应用动态规划算法解决可转债软件中的最优买卖时机问题
使用动态规划算法解决可转债市场的最佳买卖时机问题。定义状态dp[i][0](持有可转债的最大利润)和dp[i][1](不持有可转债的最大利润),通过状态转移方程更新状态,以max函数求解。提供的Python代码示例展示了如何计算最大利润。将此算法集成到软件中,结合网络爬虫获取实时价格,自动计算并提供买卖建议,助力投资者做出更明智的决策。
99 0
|
2月前
|
算法 数据可视化 数据挖掘
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
|
2月前
|
机器学习/深度学习 自然语言处理 算法
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(下)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
|
2月前
|
机器学习/深度学习 算法 大数据
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(上)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
|
2月前
|
设计模式 算法 Java
如何在面试中应对编程与算法面试?
面试中,编程能力至关重要,主要分为三个层次:初级关注基本功,如语法、原理和常见问题解决;高级涉及数据结构与算法,基础算法如排序对中小厂重要,大厂则需深入数据结构;资深专家层次需精通设计模式,以保证代码的扩展性和维护性。提升编程技能可采用PDCA循环学习法,从计划到执行、检查、行动不断迭代。通过实践项目如开发后端系统、测试框架来检验学习成果,并逐步学习算法和设计模式。坚持不懈的努力和重构将助你成为技术专家。记住,超越大多数人的关键在于持续学习和专注深耕。
16 0
如何在面试中应对编程与算法面试?
|
2月前
|
算法 搜索推荐 Serverless
掌握Go语言:Go语言递归函数,解密编程之谜,探索算法的奥秘!(27)
掌握Go语言:Go语言递归函数,解密编程之谜,探索算法的奥秘!(27)