買賣股票的最佳時機-算法詳細分析


題目:買賣股票的最佳時機:

如果你最多只允許完成一筆交易(即買入和賣出一支股票一次),設計一個算法來計算你所能獲取的最大利潤。

注意:你不能在買入股票前賣出股票。

示例 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
 package com.test.day6_10;
 
 /**
 
  * @author cosefy
  * @date 2020/6/10
    */
    public class MaxProfit {
    public static void main(String[] args) {
        int[] nums = {2,8,4,3,1};
        int maxprofit = maxProfit_Test1(nums);
        System.out.println("最大獲利:"+maxprofit);
    }
解法一:一次遍歷(無需輔助空間)

思路:從頭遍歷數組,找當前最小值,每當遇到更大數值,比較差值與原先最大獲利,遇到更小值,就更換min。
分析:時間復雜度O(n),空間復雜度O(1)。運行效率很高

public static int maxProfit_Test1(int[] nums){
    if (nums.length==0)
        return 0;
    int maxprofit= 0;
    int min = nums[0];
    for (int i = 0; i < nums.length; i++) {
        if (min < nums[i]) {
            maxprofit = (nums[i] - min) > maxprofit ? nums[i] - min : maxprofit;
        } else {
            min = nums[i];
        }
    }
    return maxprofit;
}
}
解法二:暴力解法

思路:雙重循環求得最大獲利
分析:時間復雜度O(n*n),空間復雜度O(1).效率低


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM