LeetCode 每日一题 最佳观光组合

最佳观光组合

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

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

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

示例 1:

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

输出:11

解释:i = 0, j = 2, valuesi + valuesj + i - j = 8 + 5 + 0 - 2 = 11

示例 2:

输入:values = 1,2

输出:2

提示:

2 <= values.length <= 5 * 104

1 <= valuesi <= 1000

题解

这道题需要我们计算 valuesi + valuesj + i - j

关键是我们将 valuesi + i 与 valuesj -j 看成一起的

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

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

最开始我的错误思路:

我是记录valuesi +i 的最大值与 valuesj +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;
}
相关推荐
凡人叶枫8 分钟前
Effective C++ 条款07:为多态基类声明 virtual 析构函数
linux·c语言·开发语言·c++
Black蜡笔小新11 分钟前
自动化AI算法训练服务器DLTM训推一体工作站赋能多行业智能化升级
人工智能·算法·自动化
怪兽学LLM37 分钟前
LeetCode 438 找到字符串中所有字母异位词(Python 固定滑动窗口+字符计数解法)
python·算法·leetcode
满怀冰雪42 分钟前
第04篇-双指针算法-从有序数组到回文判断的高频解法
java·算法
CC数学建模43 分钟前
2026年江西省研究生数学建模竞赛1题:空间数据分析中的过拟合识别完整思路、代码、模型、文章,全网首发高质量分享!
python·算法·数学建模
matlabgoodboy43 分钟前
计算机java程序代写python代码编写c/c++代做qt设计php开发matlab
java·c语言·python
leo__5201 小时前
MATLAB实现牧羊人算法
开发语言·算法·matlab
caimouse1 小时前
Reactos 第 5 章 进程与线程 — 5.11 线程本地存储 TLS
c语言·windows
Gauss松鼠会1 小时前
【GaussDB】GaussDB SMP特性调优详解
java·服务器·前端·数据库·sql·算法·gaussdb
Tisfy1 小时前
LeetCode 3689.最大子数组总值 I:What The Medium
算法·leetcode·题解·贪心·模拟·脑筋急转弯