【LeetCode-数组】最佳观光组合

摘要:
主题描述为正整数数组a,其中a[i]表示第i个景点的得分,两个景点i和j之间的距离为j-i。返回一对旅游景点可以获得最高分数。

题目描述

给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。
一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。
返回一对观光景点能取得的最高分。
示例:

输入:[8,1,5,2,6]
输出:11
解释:i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5 + 0 - 2 = 11

题目链接:https://leetcode-cn.com/problems/best-sightseeing-pair/

思路

我们要求数组A[i] + A[j] + i - j,i < j的最大值,将A[i] + A[j] + i - j调整为A[i] + i + A[j] - j,这样的话在遍历过程中A[j] - j可以直接算出来,使用一个变量 preMax 来表示 [0, j-1]范围内 A[i] + i 的最大值,在循环的每一步使用 preMax + A[j] - j 来更新答案即可。代码如下:

class Solution {
public:
    int maxScoreSightseeingPair(vector<int>& A) {
        if(A.empty()) return 0;

        int preMax = A[0]+0; // 使用第 0 个元素初始化
        int ans = 0;
        for(int j=1; j<A.size(); j++){
            ans = max(ans, preMax+A[j]-j);
            preMax = max(preMax, A[j]+j);
        }
        return ans;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

免责声明:文章转载自《【LeetCode-数组】最佳观光组合》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab第二篇 kubernetes 集群部署 Traefik-ingress下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle 嵌套表 老猫

一、嵌套表的定义:     嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。考查一个包含部门信息的表,在任何时间内每个部门会有很多项目正在实施。在一个严格的关系模型中,将需要建立两个独立的表department和project.   ...

[.net]数组

  在C语言中,数组是比较简单,也使用比较多的一种基础的数据结构。常用的有一维数组,二维数组等。但是在C#中,使用最多的是List,Dictionary等一些集合类,因为用他们来操作同类型的数据,比数组更加方便。当然,C#的数组Array也通过实现一些接口,提供了访问和操作数据的一些便捷方法。而在C语言中,都是比较不容易实现或者使用不方便。这也就是C#作为...

php+mysql缓存技术的实现

本教程适合于那些对缓存SQL查询以减少数据库连接与执行的负载、提高脚本性能感兴趣的PHP程序员。概述许多站点使用数据库作为站点数据存储的容器。数据库包含了产器信息、目录结构、文章或者留言本,有些数据很可能是完全静态的,这些将会从一个缓存系统中得到的极大好处。这样一个系统通过把SQL查询的结果缓存到系统的一个文件中存储,从而阻止连接数据库,构造查询与取得返回...

vue v-for的数组改变导致页面不渲染解决方法

直接在数组里,改变数组来达到重新渲染页面的目的, 需要用push等数组方法, 或者$set(),或者给数组重新赋值,来改变数组引用地址 而是直接索引= <body> <div id="app"> <li v-for='item in students'> <span>{{...

JSDOM获取子节点的一些方法

一般情况获取子节点,通过找到查找父节点的ID或者class类名,来获取父节点,再通过children属性,得到子节点的数组; 之前在另外一篇随笔中说过,如果使用另一个属性childNode,会把注释、空文本、非空文本、标签都当做子节点,所以不要使用childNode属性。 var father = document.getElementById("ID名"...

java容器类

一、  容器类: 下图摘自《Java编程思想》,很好地展示了整个容器类的结构。     由上图可知,容器类库可分为两大类,各自实现了Collection接口和Map接口,下面就常见的类进行一下分类: 实现Collection接口的容器类 Collection  ├List  │├LinkedList  │├ArrayList  │└Vector  │ └S...