zoukankan      html  css  js  c++  java
  • 1014. Best Sightseeing Pair

    问题:

    给定一个山峦分布数组,元素值代表高度。

    假设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 };
  • 相关阅读:
    正则表达式与领域特定语言(DSL)
    css兼容性问题的整理
    ASP.NET Web API 2.0新特性:Attribute Routing1
    架构讨论
    用Jekyll在github上写博客
    日历插件(beta)
    SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
    Maven中有三大模块
    hdu 2444
    4.4 从一个表向另外的表中复制行
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/13031111.html
Copyright © 2011-2022 走看看