摘要: 与Ⅰ题的思路类似。用O(n)的时间遍历一遍把任务完成。 自我感觉比Ⅰ题要简单,考虑把数组元素表现成折线图形式(就像股票的价格波动图),只要把所有上升的差值求和就是答案。 代码如下 1 class Solution { 2 public: 3 int maxProfit(vector<int>& pr 阅读全文
posted @ 2020-08-19 21:00 布羽 阅读(68) 评论(0) 推荐(0)
摘要: 这题用暴力法会超时。故直接考虑只遍历一次完成任务。使得时间复杂度为O(n)。 在遍历的过程中,维护历史最小价格和当前最大利润两个变量。(历史最小价格是目前为止可见的最小价格,并非全局最小) 每访问一个价格元素,先后更新最大利润和历史最小价格两个变量。(注意先后顺序) 提供代码如下 1 class S 阅读全文
posted @ 2020-08-19 18:40 布羽 阅读(37) 评论(0) 推荐(0)
摘要: 常规的暴力解法,所有排列组合情况试一遍,时间复杂度为O(n^2) 以leetcode的测试集来看,效率最高的是贪心法。从开头到结尾依次加,如果sum<0了,那么求和器sum归零。时间复杂度为O(n)。 代码如下 1 //贪心法 2 class Solution { 3 public: 4 int m 阅读全文
posted @ 2020-08-19 17:12 布羽 阅读(83) 评论(0) 推荐(0)
摘要: 这个作为第一道题。暴力解法还是很简单的。 快速的解法是建立字典,用O(n)的空间代价将时间代价从O(n^2)下降到O(n)。 我是用c++实现。这里需要注意,在对顺序性没有要求,并且需要更好的查找性能的时候,推荐使用unordered_map而非map。 实现代码如下 class Solution 阅读全文
posted @ 2020-08-19 11:04 布羽 阅读(83) 评论(0) 推荐(0)