LeetCode 每日一题 最佳观光组合

最佳观光组合

给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j - i。

一对景点(i < j)组成的观光组合的得分为 values[i] + values[j] + i - j ,也就是景点的评分之和 减去 它们两者之间的距离。

返回一对观光景点能取得的最高分。

示例 1:

输入:values = [8,1,5,2,6]

输出:11

解释:i = 0, j = 2, values[i] + values[j] + i - j = 8 + 5 + 0 - 2 = 11

示例 2:

输入:values = [1,2]

输出:2

提示:

2 <= values.length <= 5 * 104

1 <= values[i] <= 1000

题解

这道题需要我们计算 values[i] + values[j] + i - j

关键是我们将 values[i] + i 与 values[j] -j 看成一起的

这样的话,values[i] + i 就是一个定值,我们在枚举 j 的时候,同时维护 values[i] + i 的最大值

我们就找到 values[i] + i 的最大值与 values[j] - j 的和的最大值就是需要的答案

最开始我的错误思路:

我是记录values[i] +i 的最大值与 values[j] +j 的最大值然后相加返回

错误点是:当两个的最大值同时取到的时候,不一定满足 i<j 这个条件

代码如下↓

c 复制代码
int maxScoreSightseeingPair(int* values, int valuesSize) {
    int res=0;
    int m1=0,m2=0;
    for(int i=0,j=1;j<valuesSize;j++,i++)
    {
        if(values[i]+i>m1)
        {
            m1=values[i]+i;
        }
        m2=values[j]-j;
        if(m1+m2>res)
        {
            res=m1+m2;
            printf("%d %d\n",m1,m2);
        }
    }
    return res;
}
相关推荐
闻缺陷则喜何志丹10 分钟前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
Lenyiin28 分钟前
01.02、判定是否互为字符重排
算法·leetcode
小林熬夜学编程32 分钟前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
鸽鸽程序猿44 分钟前
【算法】【优选算法】宽搜(BFS)中队列的使用
算法·宽度优先·队列
Jackey_Song_Odd44 分钟前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
乐之者v1 小时前
leetCode43.字符串相乘
java·数据结构·算法
A懿轩A2 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
古希腊掌管学习的神2 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
云边有个稻草人2 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法