File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ # 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
2+ #
3+ # 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
4+ #
5+ # 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
6+ #
7+ #
8+ #
9+ # 示例 1:
10+ #
11+ # 输入: [7,1,5,3,6,4]
12+ # 输出: 7
13+ # 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
14+ # 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
15+ #
16+ #
17+ # 示例 2:
18+ #
19+ # 输入: [1,2,3,4,5]
20+ # 输出: 4
21+ # 解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
22+ # 注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
23+ # 因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
24+ #
25+ #
26+ # 示例 3:
27+ #
28+ # 输入: [7,6,4,3,1]
29+ # 输出: 0
30+ # 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
31+ #
32+ #
33+ #
34+ # 提示:
35+ #
36+ #
37+ # 1 <= prices.length <= 3 * 10 ^ 4
38+ # 0 <= prices[i] <= 10 ^ 4
39+ #
40+ # Related Topics 贪心算法 数组
41+
42+
43+ # leetcode submit region begin(Prohibit modification and deletion)
44+ class Solution :
45+ def maxProfit (self , prices : List [int ]) -> int :
46+ profit = 0
47+ for i in range (1 , len (prices )):
48+ tmp = prices [i ] - prices [i - 1 ]
49+ if tmp > 0 : profit += tmp
50+ return profit
51+
52+ # leetcode submit region end(Prohibit modification and deletion)
Original file line number Diff line number Diff line change 1+ # 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。
2+ #
3+ # 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。
4+ #
5+ # 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。
6+ #
7+ # 注意,一开始你手头没有任何零钱。
8+ #
9+ # 如果你能给每位顾客正确找零,返回 true ,否则返回 false 。
10+ #
11+ # 示例 1:
12+ #
13+ # 输入:[5,5,5,10,20]
14+ # 输出:true
15+ # 解释:
16+ # 前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。
17+ # 第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。
18+ # 第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。
19+ # 由于所有客户都得到了正确的找零,所以我们输出 true。
20+ #
21+ #
22+ # 示例 2:
23+ #
24+ # 输入:[5,5,10]
25+ # 输出:true
26+ #
27+ #
28+ # 示例 3:
29+ #
30+ # 输入:[10,10]
31+ # 输出:false
32+ #
33+ #
34+ # 示例 4:
35+ #
36+ # 输入:[5,5,10,10,20]
37+ # 输出:false
38+ # 解释:
39+ # 前 2 位顾客那里,我们按顺序收取 2 张 5 美元的钞票。
40+ # 对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。
41+ # 对于最后一位顾客,我们无法退回 15 美元,因为我们现在只有两张 10 美元的钞票。
42+ # 由于不是每位顾客都得到了正确的找零,所以答案是 false。
43+ #
44+ #
45+ #
46+ #
47+ # 提示:
48+ #
49+ #
50+ # 0 <= bills.length <= 10000
51+ # bills[i] 不是 5 就是 10 或是 20
52+ #
53+ # Related Topics 贪心算法
54+
55+
56+ # leetcode submit region begin(Prohibit modification and deletion)
57+ class Solution :
58+ def lemonadeChange (self , bills : List [int ]) -> bool :
59+ five = ten = 0
60+ for bill in bills :
61+ if bill == 5 :
62+ five += 1
63+ elif bill == 10 :
64+ if not five : return False
65+ five -= 1
66+ ten += 1
67+ else :
68+ if ten and five :
69+ ten -= 1
70+ five -= 1
71+ elif five >= 3 :
72+ five -= 3
73+ else :
74+ return False
75+ return True
76+
77+
78+ # leetcode submit region end(Prohibit modification and deletion)
Original file line number Diff line number Diff line change 1- 学习笔记
1+ 学习笔记
2+ # 搜索 - 遍历
3+ • 每个节点都要访问一次
4+
5+ • 每个节点仅仅要访问一次
6+
7+ • 对于节点的访问顺序不限
8+ - 深度优先: depth first search
9+ - 广度优先: breadth first search
10+
11+ # 贪心算法
12+ 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有
13+ 利)的选择,从而希望导致结果是全局最好或最优的算法。
14+
15+ 贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择,不
16+ 能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行
17+ 选择,有回退功能。
You can’t perform that action at this time.
0 commit comments