【刷题笔记9.30】LeetCode:买卖股票的最佳时机

LeetCode:买卖股票的最佳时机

一、题目描述

【刷题笔记9.30】LeetCode:买卖股票的最佳时机_第1张图片

二、分析

解决此题涉及到的算法为:动态规划

  • 1、创建变量maxPrice 用于记录最大利润值,初始值为0
  • 2、创建变量minPrice 用于记录当前最低价格
  • 3、一次循环遍历,如果当前股票价格小于最低价格,则替换最低价格minPrices,else 如果当前价格 - 最低价格minPrice > 最大利润maxPrice,则替换maxPrice的值为当前价格 - 最低价格minPrice
    (注意:因为是从前往后一次遍历所有不涉及买入价格高于卖出价格)

三、上代码

/**
 * 题目:买卖股票的最佳时机
 * 解法1:通过动态规划(创建两个变量maxProfit、minPrice用于记录最大利润和最低价格)
 * 解法2:暴力解法(双层循环)——暴力解法会超时,妈的不推荐
 */
public class Deal7 {
    //方法1:动态规划
    public int maxProfit(int[] prices) {
        //maxProfit: 用于记录最大的利润
        int maxProfit = 0;

        //minPrice: 用于记录最低价格(初始值为一个最大值)
        int minPrice = Integer.MAX_VALUE;

        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;
    }
    //方法2:暴力解法
    public int maxProfit1(int[] prices) {
        int maxProfit = 0;
        for (int i = 0; i < prices.length; i++) {
            for (int j = i+1; j < prices.length; j++) {
                if (prices[j] - prices[i] > maxProfit) {
                    maxProfit = prices[j] - prices[i];
                }
            }
        }
        return maxProfit;
    }

}

你可能感兴趣的:(笔记,leetcode,算法)