ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

买卖股票的最佳时机 II

买卖股票的最佳时机 II 题目描述给你一个整数数组pricespricesprices其中prices[i]prices[i]prices[i]表示某支股票第iii天的价格在每一天你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。然而你可以在 同一天 多次买卖该股票但要确保你持有的股票不超过一股返回你能获得的最大利润示例 1输入prices [7,1,5,3,6,4]输出7解释在第 2 天股票价格 1的时候买入在第 3 天股票价格 5的时候卖出, 这笔交易所能获得利润 5 - 1 4。随后在第 4 天股票价格 3的时候买入在第 5 天股票价格 6的时候卖出, 这笔交易所能获得利润 6 - 3 3。最大总利润为 4 3 7示例 2输入prices [1,2,3,4,5]输出4解释在第 1 天股票价格 1的时候买入在第 5 天 股票价格 5的时候卖出, 这笔交易所能获得利润 5 - 1 4。最大总利润为 4算法思想以折线图来查看股票价格通过这个图我们可以发现只要将每一段递增区间中最后一个值和第一个值和的差计算出来并求和就可以得到结果。那这就是贪心的思路实现方式有两种双指针和一天一天计算利润双指针设定两个指针i0i 0i0jij iji当prices[j1]prices[j]prices[j 1] prices[j]prices[j1]prices[j]时jjj向后移动否则jjj不动最终jjj会移动至递增区间的最后一个值此时计算prices[j]−prices[i]prices[j] - prices[i]prices[j]−prices[i]加入结果计算完成让iii移动至j1j 1j1的位置继续找递增区间一天天计算利润递增区间最后一天减去第一天得到的利润可以拆分成内部每一天减去前一天的利润之和。所以设定一个指针iii遍历数组当prices[i1]prices[i]prices[i 1] prices[i]prices[i1]prices[i]时计算它们的差加到结果中代码// 1. 双指针classSolution{public:intmaxProfit(vectorintprices){intret0;for(inti0;iprices.size();){intji;while(jprices.size()-1prices[j1]prices[j]){j;}retprices[j]-prices[i];ij1;}returnret;}};// 2. 一天一天算利润classSolution{public:intmaxProfit(vectorintprices){intret0;for(inti0;iprices.size()-1;i){if(prices[i1]prices[i]){retprices[i1]-prices[i];}}returnret;}};
返回列表