题解 | #牛群买卖策略优化#
牛群买卖策略优化
https://www.nowcoder.com/practice/c8514318443a48218efde630ae11b4c3
知识点
贪心,模拟
思路
首先,我们知道牛在同一天买卖是没有意义的(因为利润为0)。所以我们只需要考虑隔天买卖的情况。
假设price数组的长度为n。假设对于i,有price[i~j]都为递增,那么只需要你在第i天买,第j天卖,即可获得最大利润(在中间买卖也没有意义,因为无利润)
所以我们只需要遍历price,对每一个i,寻找右侧最大的递增末位,不断更新ans即可,ans+=price[j]-price[i],然后把i赋值为j,因为这段区间[i~j]已经不需要再进行交易了,利润已经被榨干了。
代码c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param prices int整型vector
* @return int整型
*/
int max_profitv2(vector<int>& prices) {
// write code here
int ans=0;
int n=prices.size();
for(int i=0;i<prices.size();i++)
{
int j=i;
while(j+1<n&&prices[j]<prices[j+1])j++;//j+1的上界不能超过n
ans+=(prices[j]-prices[i]);//更新利润
i=j;//更新下一个区间的起点
}
return ans;
}
};