1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
| """ 思路: 1.一個完整交易包含買進和賣出,輸入陣列最後一筆股價是不能用來做買入 2.[(n+1)天股價-n天股價]比[n天股價-(n-1)天股價]大,就可以當作最佳獲利 3.從第二點條件來看則需要兩個回圈,外圈從n天買入開始,內圈從n+1天賣出結束,最後一次買入為len(arr)-1 """
def find_the_best_deal(arr): if len(arr) == 0: print('input is empty.') return 0
print(f'====================================') print(f'input: {arr}')
best_profit = 0
for i in range(0, len(arr) - 1): for j in range(i + 1, len(arr)): profit = arr[j] - arr[i] if profit > best_profit: best_profit = profit
buy_price = str(arr[i]).rjust(1, " ") sell_price = str(arr[j]).rjust(1, " ") profit_price = str(profit).rjust(2, " ") best_profit_price = str(best_profit).rjust(2, " ") print( f'第{i + 1}天買入股價:{buy_price}, 第{j + 1}天賣出股價:{sell_price}, 當次獲利:{profit_price}, 最佳獲利:{best_profit_price}') print()
print(f'output: 最佳獲利為 {best_profit}')
test_case1 = [7, 1, 5, 3, 6, 4] test_case2 = [7, 6, 4, 3, 1] test_case3 = [1, 2, 3, 2, 1] test_case4 = [1, 2, 3, 2, 1, 7]
find_the_best_deal(test_case1) find_the_best_deal(test_case2) find_the_best_deal(test_case3) find_the_best_deal(test_case4)
""" Result: ==================================== input: [7, 1, 5, 3, 6, 4] 第1天買入股價:7, 第2天賣出股價:1, 當次獲利:-6, 最佳獲利: 0 第1天買入股價:7, 第3天賣出股價:5, 當次獲利:-2, 最佳獲利: 0 第1天買入股價:7, 第4天賣出股價:3, 當次獲利:-4, 最佳獲利: 0 第1天買入股價:7, 第5天賣出股價:6, 當次獲利:-1, 最佳獲利: 0 第1天買入股價:7, 第6天賣出股價:4, 當次獲利:-3, 最佳獲利: 0
第2天買入股價:1, 第3天賣出股價:5, 當次獲利: 4, 最佳獲利: 4 第2天買入股價:1, 第4天賣出股價:3, 當次獲利: 2, 最佳獲利: 4 第2天買入股價:1, 第5天賣出股價:6, 當次獲利: 5, 最佳獲利: 5 第2天買入股價:1, 第6天賣出股價:4, 當次獲利: 3, 最佳獲利: 5
第3天買入股價:5, 第4天賣出股價:3, 當次獲利:-2, 最佳獲利: 5 第3天買入股價:5, 第5天賣出股價:6, 當次獲利: 1, 最佳獲利: 5 第3天買入股價:5, 第6天賣出股價:4, 當次獲利:-1, 最佳獲利: 5
第4天買入股價:3, 第5天賣出股價:6, 當次獲利: 3, 最佳獲利: 5 第4天買入股價:3, 第6天賣出股價:4, 當次獲利: 1, 最佳獲利: 5
第5天買入股價:6, 第6天賣出股價:4, 當次獲利:-2, 最佳獲利: 5
output: 最佳獲利為 5 ==================================== input: [7, 6, 4, 3, 1] 第1天買入股價:7, 第2天賣出股價:6, 當次獲利:-1, 最佳獲利: 0 第1天買入股價:7, 第3天賣出股價:4, 當次獲利:-3, 最佳獲利: 0 第1天買入股價:7, 第4天賣出股價:3, 當次獲利:-4, 最佳獲利: 0 第1天買入股價:7, 第5天賣出股價:1, 當次獲利:-6, 最佳獲利: 0
第2天買入股價:6, 第3天賣出股價:4, 當次獲利:-2, 最佳獲利: 0 第2天買入股價:6, 第4天賣出股價:3, 當次獲利:-3, 最佳獲利: 0 第2天買入股價:6, 第5天賣出股價:1, 當次獲利:-5, 最佳獲利: 0
第3天買入股價:4, 第4天賣出股價:3, 當次獲利:-1, 最佳獲利: 0 第3天買入股價:4, 第5天賣出股價:1, 當次獲利:-3, 最佳獲利: 0
第4天買入股價:3, 第5天賣出股價:1, 當次獲利:-2, 最佳獲利: 0
output: 最佳獲利為 0 ==================================== input: [1, 2, 3, 2, 1] 第1天買入股價:1, 第2天賣出股價:2, 當次獲利: 1, 最佳獲利: 1 第1天買入股價:1, 第3天賣出股價:3, 當次獲利: 2, 最佳獲利: 2 第1天買入股價:1, 第4天賣出股價:2, 當次獲利: 1, 最佳獲利: 2 第1天買入股價:1, 第5天賣出股價:1, 當次獲利: 0, 最佳獲利: 2
第2天買入股價:2, 第3天賣出股價:3, 當次獲利: 1, 最佳獲利: 2 第2天買入股價:2, 第4天賣出股價:2, 當次獲利: 0, 最佳獲利: 2 第2天買入股價:2, 第5天賣出股價:1, 當次獲利:-1, 最佳獲利: 2
第3天買入股價:3, 第4天賣出股價:2, 當次獲利:-1, 最佳獲利: 2 第3天買入股價:3, 第5天賣出股價:1, 當次獲利:-2, 最佳獲利: 2
第4天買入股價:2, 第5天賣出股價:1, 當次獲利:-1, 最佳獲利: 2
output: 最佳獲利為 2 ==================================== input: [1, 2, 3, 2, 1, 7] 第1天買入股價:1, 第2天賣出股價:2, 當次獲利: 1, 最佳獲利: 1 第1天買入股價:1, 第3天賣出股價:3, 當次獲利: 2, 最佳獲利: 2 第1天買入股價:1, 第4天賣出股價:2, 當次獲利: 1, 最佳獲利: 2 第1天買入股價:1, 第5天賣出股價:1, 當次獲利: 0, 最佳獲利: 2 第1天買入股價:1, 第6天賣出股價:7, 當次獲利: 6, 最佳獲利: 6
第2天買入股價:2, 第3天賣出股價:3, 當次獲利: 1, 最佳獲利: 6 第2天買入股價:2, 第4天賣出股價:2, 當次獲利: 0, 最佳獲利: 6 第2天買入股價:2, 第5天賣出股價:1, 當次獲利:-1, 最佳獲利: 6 第2天買入股價:2, 第6天賣出股價:7, 當次獲利: 5, 最佳獲利: 6
第3天買入股價:3, 第4天賣出股價:2, 當次獲利:-1, 最佳獲利: 6 第3天買入股價:3, 第5天賣出股價:1, 當次獲利:-2, 最佳獲利: 6 第3天買入股價:3, 第6天賣出股價:7, 當次獲利: 4, 最佳獲利: 6
第4天買入股價:2, 第5天賣出股價:1, 當次獲利:-1, 最佳獲利: 6 第4天買入股價:2, 第6天賣出股價:7, 當次獲利: 5, 最佳獲利: 6
第5天買入股價:1, 第6天賣出股價:7, 當次獲利: 6, 最佳獲利: 6
output: 最佳獲利為 6
"""
|