力扣 买卖股票的最佳时机

贪心算法典型例题。

题目

做过股票交易的都知道,想获取最大利润,就得从最低点买入,最高点卖出。这题刚好可以用暴力,一个数组中找到最大的数跟最小的数,然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数作比较,可以选用两个for循环。这题用dp同理,不过dp数组存状态是多余的。

时间复杂度: O(n^2),空间复杂度: O(1)。

java 复制代码
public class Solution {
    public int maxProfit(int[] prices) {
        int max = 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 > max) {
                    max = profit;
                }
            }
        }
        return max;
    }
}

不过超时了,可以优化一下,从前往后遍历,每遍历到一个数,即每去到一天时,去存最低价跟最大利润,因为最低价购入可以得到更大利润,最高价直接更新最大利润。

时间复杂度: O(n),空间复杂度: O(1)。

java 复制代码
public class Solution {
    public int maxProfit(int[] prices) {

        int pre = prices[0];
        int ans = 0;
        for (int i = 0; i < prices.length; i++) {
           ans = Math.max(ans, prices[i] - pre);
           pre = Math.min(pre, prices[i]);
        }
        return ans;
    }
}

贪心的策略是,每到一个数可存到一个局部最优解,而遍历完后做一次次更新去得到目标值。

相关推荐
liu****6 小时前
20.哈希
开发语言·数据结构·c++·算法·哈希算法
夏鹏今天学习了吗6 小时前
【LeetCode热题100(47/100)】路径总和 III
算法·leetcode·职场和发展
smj2302_796826526 小时前
解决leetcode第3721题最长平衡子数组II
python·算法·leetcode
m0_626535207 小时前
力扣题目练习 换水问题
python·算法·leetcode
第六五7 小时前
DPC和DPC-KNN算法
人工智能·算法·机器学习
一匹电信狗7 小时前
【LeetCode_160】相交链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
再卷也是菜7 小时前
C++篇(14)二叉树进阶算法题
c++·算法
小邓儿◑.◑8 小时前
贪心算法 | 每周8题(三)
算法·贪心算法
2401_841495648 小时前
【数据结构】最长的最短路径的求解
java·数据结构·c++·python·算法·最短路径·图搜索
小龙报8 小时前
《算法每日一题(1)--- 连续因子》
c语言·开发语言·c++·windows·git·算法·visual studio