最佳观光组合
观察公式 v a l u e s [ j ] − j + v a l u e s [ i ] + i values[j]-j+values[i]+i values[j]−j+values[i]+i发现,当枚举第二个 j j j的时候,对于每一个 v a l u e s [ j ] − j values[j]-j values[j]−j都是唯一确定的,因此只需要在遍历的时候维护 v a l u e s [ i ] + i values[i]+i values[i]+i的最大值即可
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& values) {
int res = 0, maxn = values[0];
for (int i = 1; i < valus.size(); i ++ ){
res = max(res, values[i] - i + maxn);
maxn = max(maxn, values[i] + i);
}
return res;
}
};
买卖股票的最佳时机
找差值最大的两天
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res = 0, minn = prices[0];
for (int i = 1; i < prices.size(); i ++ )
{
res = max(res, prices[i] - minn);
minn = min(minn, prices[i]);
}
return res;
}
};
买卖股票的最佳时机二
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res = 0, minn = 0, n = prices.size();
bool flag = false;
for (int i = 0; i < n; i ++ )
{
if (!flag){
while (i + 1 < n && prices[i] > prices[i + 1]) i ++ ;
flag = true;
minn = prices[i];
}
else{
while (i + 1 < n && prices[i] < prices[i + 1]) i ++ ;
flag = false;
res += prices[i] - minn;
}
}
return res;
}
};