力扣(leetcode)每日一题 1014 最佳观光组合

news2024/9/23 15:51:33
题干

1014. 最佳观光组合

给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 ij 之间的 距离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
解法

两个点,一个start,一个end,start点的位置小于end。
可以得出start点的价值就是 values[i] + i 景点价值加上本身位置价值。
end点的价值就是 values[j] - j 景点价值减去本身位置价值
这样只要把两个列表的值相加得到最大就可以了 公式如下 Max( startArr[i] + endArr[j]) j>i求最大值可以预先生成

for (int i = length - 2; i >= 0; i--) {  
    endArr[i] = Math.max(endArr[i], endArr[i + 1]);
}  

这样可以将复杂度从LogN^N降低到logN


public static int maxScoreSightseeingPair(int[] values) {  
    int length = values.length;  
    int[] startArr = new int[length];  
    int[] endArr = new int[length];  
    for (int i = 0; i < length; i++) {  
        startArr[i] = values[i] + i;  
        endArr[i] = values[i] - i;  
    }  
    // start i + end j  
    //    // 确定了i  需要找end这边的最大值  
    for (int i = length - 2; i >= 0; i--) {  
        endArr[i] = Math.max(endArr[i], endArr[i + 1]);  
    }  
    int max = Integer.MIN_VALUE;  
    for (int i = 0; i < length - 1; i++) {  
        int value = startArr[i] + endArr[i + 1];  
        max = Math.max(max, value);  
    }  
    return max;  
}  

优化一下写法
节省一个数组空间,节省一次遍历,然后变量写的抽象些

  
public static int maxScoreSightseeingPair(int[] values) {  
    int[] endArr = new int[values.length];  
    for (int i = values.length - 1; i >= 0; i--) {  
        if (i == values.length - 1) {  
            endArr[i] = values[i] - i;  
        } else {  
            endArr[i] = Math.max(values[i] - i, endArr[i + 1]);  
        }  
    }  
    int max = Integer.MIN_VALUE;  
    for (int i = 0; i < values.length - 1; i++) {  
        max = Math.max(max, values[i] + i + endArr[i + 1]);  
    }  
    return max;  
}

在这里插入图片描述
优化后
在这里插入图片描述

空间上还可以进一步优化。从后往前遍历,用新的值覆盖旧的值来达到节约内存的目的


public static int maxScoreSightseeingPair(int[] values) {  
    int max = Integer.MIN_VALUE;  
    int maxright = values[values.length - 1] - (values.length - 1);  
    for (int i = values.length - 2; i >= 0; i--) {  
        max = Math.max(max, values[i] + i + maxright);  
        maxright = Math.max(values[i] - i, maxright);  
    }  
    return max;  
}

再优化一个空间值


public static int maxScoreSightseeingPair(int[] values) {  
    int max = Integer.MIN_VALUE;  
    values[values.length - 1] = values[values.length - 1] - (values.length - 1);  
    for (int i = values.length - 2; i >= 0; i--) {  
        max = Math.max(max, values[i] + i + values[i + 1]);  
        values[i] = Math.max(values[i] - i, values[i + 1]);  
    }  
    return max;  
}

没啥用放弃研究了,在研究也感觉意义不大
在这里插入图片描述

总结

对找下标i右边的最大值进行预先处理,达到复用。也算是记忆搜索的一种。属于简单题目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2157915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows 出现身份验证错误,要求的函数不受支持

现象环境&#xff1a; win10 mstsc内网远程server2016&#xff0c;出现错误代码&#xff1a; 远程桌面连接出现身份验证错误。要求的函数不受支持。这可能是由于CredSSP加密数据库修正 出现身份验证错误 原因&#xff1a; 系统更新&#xff0c;微软系统补丁的更新将 Cred…

<刷题笔记> 力扣236题——二叉树的公共祖先

236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 题目解释&#xff1a; 我们以这棵树为例&#xff0c;来观察找不同的最近公共祖先有何特点&#xff1a; 思路一&#xff1a; 除了第二种情况&#xff0c;最近公共祖先满足&#xff1a;一个节点在他的左边&am…

现代LLM基本技术整理

0 开始之前 本文从Llama 3报告出发&#xff0c;基本整理一些现代LLM的技术。基本&#xff0c;是说对一些具体细节不会过于详尽&#xff0c;而是希望得到一篇相对全面&#xff0c;包括预训练&#xff0c;后训练&#xff0c;推理&#xff0c;又能介绍清楚一些具体技术&#xff0…

Hierarchical Video-Moment Retrieval and Step-Captioning

背景 为了激发人们对使用机器学习系统从这些基于文本查询的大型视频语料库中提取和总结重要信息的兴趣&#xff0c;在视频检索、时刻检索、视频摘要和视频字幕方面取得了进展。以前的工作通常侧重于独立解决这些任务&#xff1b;然而&#xff0c;所有这些任务都有一个共同的目标…

科研绘图系列:R语言连线点图(linechart dotplot)

文章目录 介绍加载R包导入数据数据预处理画图组合图形导出数据系统信息介绍 不同物种的强度和微生物的组成情况 加载R包 library("here") library("tidyverse") library("reshape2") library("vegan")

照片写真记录摄影作品记录网站源码

完美适应iPad&#xff0c;平板&#xff0c;手机竖屏不支持lazy&#xff0c;横屏可以&#xff0c;但建议使用平板查看效果&#xff0c; 有服务器直接上传解压使用&#xff0c;环境nginxphp&#xff0c; 没有服务器也没关系&#xff0c;可以直接使用html

Cherry Studio:开启AI智能工作的新篇章

引言 在当今快速发展的科技时代&#xff0c;如何高效利用人工智能技术提升工作效率&#xff0c;成为了各行各业专业人士的共同追求。&#x1f352; Cherry Studio 正是为此而生&#xff0c;它是一款支持多模型服务的桌面客户端&#xff0c;内置了超过 30 个行业的智能助手&…

Could not load library libcudnn_cnn_train.so.8 问题及(非常简单)解决方案

问题描述 Could not load library libcudnn_cnn_train.so.8. Error: /usr/local/cuda-11.8/lib64/libcudnn_cnn_train.so.8: undefined symbol: _ZN5cudnn3cnn34layerNormFwd_execute_internal_implERKNS_7backend11VariantPackEP11CUstream_stRNS0_18LayerNormFwdParamsERKNS…

对抗攻击的详细解析:原理、方法与挑战

对抗攻击的详细解析&#xff1a;原理、方法与挑战 对抗攻击&#xff08;Adversarial Attack&#xff09;是现代机器学习模型&#xff0c;尤其是深度学习模型中的一个关键安全问题。其本质在于&#xff0c;通过对输入数据添加精微的扰动&#xff0c;人类难以察觉这些扰动&#…

教你一招:在微信小程序中为用户上传的图片添加时间水印

在微信小程序开发过程中&#xff0c;我们常常需要在图片上添加水印&#xff0c;以保护版权或增加个性化元素。本文将为大家介绍如何在微信小程序中为图片添加时间水印&#xff0c;让你的小程序更具特色。 实现步骤&#xff1a; 1. 创建页面结构 在pages目录下创建一个名为upl…

使用思科搭建企业网规划训练,让网络全部互通,使用规则提高工作效率。

1. 企业背景&#xff1a; 某企业分为销售部、行政部、人力资源部、财务部、业务部、接待中心等主要六个部门&#xff1b;配置网管中心&#xff0c;允许网络管理员登录企业交换机和路由器对企业网络进行管理&#xff1b;配置服务器集群&#xff0c;设置FTP、DNS、WEB服务器&am…

一个基于 Tauri、Vite 5、Vue 3 和 TypeScript 构建的即时通讯系统,牛啊牛啊!(附源码)

这段时间正在学习桌面端开发&#xff0c;目前了解了Electron和Tauri,在搜索教程的时候发现了一位大佬用Tauri开发了个即时通讯的软件&#xff0c;并且技术栈用的也是VUE3和TypeScript&#xff0c;所以今天就给大家分享一下这个项目——HuLa HuLa HuLa 是一个基于 Tauri、Vite …

Skyeye 云智能制造 v3.14.6 发布,ERP 商城

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

【Elasticsearch系列廿一】ES7 SQL 新特性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

嵌入式设备网口down后再up时不能link?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

[ComfyUI]又降了,只需10G显存玩转CogVideoX5B图生视频,效果太惊艳!

在数字艺术和创意领域&#xff0c;[ComfyUI]一直致力于为用户提供最优质的技术和工具。今天&#xff0c;我们激动地宣布&#xff0c;[ComfyUI]再次取得重大突破——只需10G显存&#xff0c;用户就能轻松玩转CogVideoX5B图生视频&#xff0c;创造出令人惊艳的效果&#xff01; …

【人工智能】在大型活动中的应用案例

人工智能在娱乐大型活动中的应用 ## 作者主页: 知孤云出岫 目录 **人工智能在娱乐大型活动中的应用****1. 引言****2. 智能票务与入场管理****2.1 动态定价与票务预测****2.2 生物识别技术快速入场****2.3 区块链技术防伪票务管理** **3. 智能观众互动与个性化体验****3.1 个性…

Java语言程序设计基础篇_编程练习题**18.35(H 树分形)

目录 题目&#xff1a;**18.35(H 树分形) 代码示例 代码解释 输出结果 题目&#xff1a;**18.35(H 树分形) 一个H 树分形(本章开始部分介绍过&#xff0c;如图18-1)如下定义: 1)从字母H开始。H的三条线长度一样&#xff0c;如图 18-1a 所示。 2)字母H(以它的 sans-serif …

归并算法实现

1.归并算法图解 2.归并算法代码 package com.suanfa.sort;import java.util.Arrays;/*** 归并算法*/ public class MergeSort {/*** 拆的时间复杂度logn * 并的时间复杂度n nlogn** param arr* param left* param right*/public static void sortMerge(int[] arr, int left, …

第十一章 从0-1搭建一个简单的JavaWeb系统(三)

目录 一、工程代码结构 二、代码实现 三、运行效果 四、未完待续 本章节的每一段代码&#xff0c;建议全部自己敲一遍&#xff0c;加深印象&#xff0c;切勿直接复制黏贴。 一、工程代码结构 本章节实现注销&#xff08;退出&#xff09;功能&#xff0c;以下图片中标红的…