标签:color class false code 多少 note 分布 元素 ret
问题:
给定一个山峦分布数组,元素值代表高度。
假设score分值=两山高度和-两山距离=A[i]+A[j]-(j-i)=A[i]+A[j]+i-j
求这个分值最高是多少?
Example 1: Input: [8,1,5,2,6] Output: 11 Explanation: i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5 + 0 - 2 = 11 Note: 2 <= A.length <= 50000 1 <= A[i] <= 1000
解法1:
按照题意,求找尽可能高的两座山,且其距离越短越好。
转而理解为:
假设已找到目前为止最高的山高度cur,再找另一座山的时候,随着距离增大,cur会不断减分,
最终得分res=cur减完分后+新找到的山高
代码参考:
1 class Solution { 2 public: 3 int maxScoreSightseeingPair(vector<int>& A) { 4 int res=0, cur=0; 5 for(int a:A){ 6 res=max(res, cur+a); 7 cur=max(cur, a)-1; 8 } 9 return res; 10 } 11 };
解法2:
要求max(A[i]+A[j]+i-j)
首先要使得 A[i]+i 最大,
然后再求 A[i]+i+A[j]-j 的最大。
如果,A[j]+j > A[i]+i 那么需要更新 i 为 j
代码参考:
1 class Solution { 2 public: 3 int maxScoreSightseeingPair(vector<int>& A) { 4 int i=0,j=1; 5 int res=0; 6 for(j=1;j<A.size();j++){ 7 res=max(res, A[i]+i+A[j]-j); 8 if(A[j]+j>A[i]+i){ 9 i=j; 10 } 11 } 12 return res; 13 } 14 };
标签:color class false code 多少 note 分布 元素 ret
原文地址:https://www.cnblogs.com/habibah-chang/p/13031111.html