力扣题解1014

大家好,欢迎来到无限大的频道。

今日继续给大家带来力扣题解。

题目描述(中等):

最佳观光组合

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

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

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

题目分析:

我们需要找到一对景点(i < j),使得它们的观光组合得分最大。组合得分的计算方式是 values[i] + values[j] + i - j。这一公式可以拆分为 (values[i] + i) + (values[j] - j)。这样,我们的问题就可以转化为:在遍历到位置 j 时,找一个最优的 i 使得 (values[i] + i) 最大。

这样,我们可以通过线性扫描数组来完成任务。

解题思路:

  1. 初始化变量:我们需要两个变量:max_score 用来存储最大的得分,max_i 用来存储最大 values[i] + i。

  2. 遍历数组:从第二个元素(j = 1)开始遍历 values。

    • 计算当前组合得分:对于每个 j,计算 current_score 为 max_i + values[j] - j。

    • 更新最大得分:如果 current_score 大于 max_score,更新 max_score。

    • 更新 max_i:在每一步,更新 max_i 为 max(max_i, values[j] + j)。这是为了保证后续位置 j 使用到最优的 i。

  3. 返回最大得分:最终返回 max_score。

参考代码如下:

int maxScoreSightseeingPair(int* values, int valuesSize) {// 初始化 max_i 为第一个元素的值加上它的索引int max_i = values[0] + 0;int max_score = 0;
​// 从第二个元素开始遍历for (int j = 1; j < valuesSize; j++) {// 计算当前组合的得分int current_score = max_i + values[j] - j;// 更新最优得分if (current_score > max_score) {max_score = current_score;}// 更新 max_i,使其为当前元素的值加上它的索引,或者保持为之前的最大值if (values[j] + j > max_i) {max_i = values[j] + j;}}
​return max_score;
}

    ​这个算法虽然没有显式地使用动态规划的传统形式(例如,使用表格存储子问题的解),但它确实利用了一种动态规划的思想来优化计算过程。让我们深入分析一下。

动态规划的基本思想

动态规划(Dynamic Programming, DP)通常用于解决可以分解为重叠子问题的优化问题。它的核心思想是通过保存已经计算过的结果来避免重复计算,从而提高效率。动态规划通常涉及以下几个步骤:

1. 定义状态:明确需要存储的信息。

2. 建立状态转移方程:确定如何从已知状态推导出新状态。

3. 初始化状态:设置初始条件。

4. 计算结果:根据状态转移方程计算最终结果。

在这个算法中的运用

在 `maxScoreSightseeingPair` 函数中,虽然没有使用表格来存储中间结果,但它通过以下方式实现了动态规划的思想:

1. 定义状态:

   - `max_i` 代表在当前元素之前(即 `j` 的前一个元素)可以获得的最大得分 `values[i] + i`。这个状态在每一步中都在更新。

2. 状态转移:

   - 在每次循环中,我们通过 `max_i` 来计算当前得分 `current_score`。这个得分依赖于之前的状态 `max_i` 和当前的 `values[j] - j`。这样,我们实际上在用 `max_i` 的值来动态计算出当前 `j` 的最优得分。

3. 初始化状态:

   - `max_i` 初始为 `values[0] + 0`,这是我们在计算中需要的第一个状态。

4. 计算结果:

   - 通过遍历整个数组,更新 `max_score` 和 `max_i`,最终得到最大得分。

虽然这个算法没有使用动态规划的典型方式(如二维数组或一维数组来存储多个状态),但它确实利用了动态规划的核心思想:通过维护一个状态(`max_i`),在遍历过程中动态更新并计算结果。

因此,可以说这个算法在某种程度上是基于动态规划的思想,但它的实现方式更为简洁,使用了常量级的空间来存储状态,而不是使用一个完整的 DP 表。

复杂度:

时间复杂度:

在代码中,我们只进行了一次遍历,遍历了整个数组 values。具体分析如下:

  • 遍历数组:我们使用一个 for 循环从 j = 1 到 valuesSize - 1,这意味着循环的次数是 n-1,其中 n 是数组的长度。

  • 每次迭代的操作:在循环体内,我们进行了一些常数时间的操作(如加法、比较、赋值等),这些操作的时间复杂度都是 O(1)。

因此,整个算法的时间复杂度为 O(n),其中 n 是数组 values 的长度。

空间复杂度:

在空间复杂度方面:

  • 使用的额外空间:我们只使用了几个额外的变量(max_i、max_score 和 current_score),这些变量占用的空间是常数级别的。

  • 输入数组:我们没有使用任何额外的数据结构来存储数据,输入数组 values 在空间复杂度的计算中不被考虑。

因此,整个算法的空间复杂度为 O(1),即只使用了常量级的额外空间。

总结

  • 时间复杂度:O(n)

  • 空间复杂度:O(1)

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

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

相关文章

Bytebase 2.23.0 - 支持 Entra (Azure AD) 用户/组同步

&#x1f680; 新功能 支持从 Entra ID&#xff08;前 Azure AD&#xff09;同步用户和群组。 支持 CockroachDB。 支持项目级别的默认备份设置&#xff0c;包含自动启用和跳过错误选项。 SQL 编辑器支持实时语法检查。 支持配置密码限制策略。 &#x1f514; 重大变更 分类…

torch.nn系列函数学习 --- Conv2d函数

该函数的官方文档&#xff1a; https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_modezeros, deviceNone, dtypeNone)…

MySQL—多表操作详解

在 MySQL 中&#xff0c;多表操作通常涉及联接&#xff08;JOIN&#xff09;和子查询&#xff08;Subquery&#xff09;&#xff0c;用于处理来自多个表的数据。 约束分类 约束介绍 约束&#xff1a;用于对数据库表中的数据进行限定&#xff0c;确保数据的正确性、有效性和完…

Shelly实测天工的音乐创作功能,写了一首歌,来听听效果

​ 大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 在数字时代的洪流中&#xff0c;我始终…

C语言 fwirte 函数 - C语言零基础入门教程

目录 一.fwirte 函数简介二.fwirte 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.fwirte 函数简介 C 语言文件读写&#xff0c;fread 函数用于读取文件中的数据到指定缓冲区中&#xff0c;而 fwrite 函数用于把缓冲区数据写入到文件…

Linux(麒麟系统)多显示器屏幕录制

Linux桌面设备在接入多显示器的情况下&#xff0c;有些只录主显示器&#xff0c;有些场景要单独录制每个显示器&#xff0c;X Window System支持多显示器配置和显示器列表获取&#xff0c;需要XRandR 1.5及以上版本&#xff0c;查看RandR version 命令: xrandr --version 使用x…

MCU和YT9218交换机通过RMII连接

1、可以通过带RMII的MCU和EXT1端口连接&#xff0c;将MCU配置为RMII 100M/全双工就可以通 2、原先在这里改SW配置&#xff0c; 一直不通 3、后来通过api调用可以通 这样改&#xff1a; 在初始化后&#xff0c;添加下面代码 //使能RMII&#xff0c;phy模式 #define Port5 …

pycharm安装教程,超详细

引言 PyCharm官网提供了两个版本&#xff0c;第一个版本是Professional&#xff08;专业版本&#xff09;&#xff0c;这个版本功能更加强大&#xff0c;主要是为Python和web开发者而准备&#xff0c;是需要付费的。第二个版本是社区版&#xff08;Community&#xff09;&…

10月23-27日六西格玛绿带公开课即将在雄安新区开课

在金秋送爽、硕果累累的季节里&#xff0c;天行健管理咨询公司宣布了一项重要决定——定于10月23日至27日&#xff0c;在充满未来气息的河北雄安新区&#xff0c;举办一场旨在提升企业质量管理水平、培养精英人才的六西格玛绿带公开课。此次课程的举办&#xff0c;不仅是对当前…

LeetCode 每日一题 ---- 【1014. 最佳观光组合】

LeetCode 每日一题 ---- 【1014. 最佳观光组合】 1014.最佳观光组合题解&#xff1a;枚举右 维护左 1014.最佳观光组合 题解&#xff1a;枚举右 维护左 先对题目中的式子进行变形 values[i] values[j] i - j > (values[i] i) (values[j] - j) 枚举右端点 j&#xf…

活动报名| 探索存内计算的未来,共话AGI时代

活动日期&#xff1a;2024年09月28日 下午一点到6点 地点&#xff1a;杭州技术转移中心 三楼路演厅 议程亮点&#xff1a; 存内计算技术架构以及最新趋势AGI开源项目交流存内计算实操上板体验 存内计算 ——突破物理极限的下一代算力技术 直接消除“存”“算”界限&…

2024/9/22周报

文章目录 摘要Abstract可能的数据结构数据集结构 数据处理步骤数据集示例人工智能模型应用关键评估目标评价指标分类应用实例最终目标多目标优化的基本概念1. Pareto最优解&#xff08;Pareto Optimality&#xff09;2. 目标权重法&#xff08;Weighted Sum Method&#xff09;…

二.python基础语法

目录 1.第一个python实例 2.python编码规范 2.1.编写规则 2.2.命名规范 2.3. 空格 2.4. 缩进 2.5. 注释 3.python关键字和标识符 3.1.标识符 3.2.关键字 4.python变量 4.1. 定义变量 4.2. 变量类型是可变的 4.3. 多个变量指向同一个值 5.python基本数据类型 5.…

基于vue框架的传统文化传播网站设计与实现f7r43(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,文化类型,传统文化 开题报告内容 基于Vue框架的传统文化传播网站设计与实现开题报告 一、研究背景 在全球化加速的今天&#xff0c;各国文化相互交融&#xff0c;但也面临着传统文化被边缘化的风险。中国拥有五千年文明史&#…

ai绘画工具Playground v3:重新定义AI图像生成

Playground AI是一款免费的在线AI绘画工具&#xff0c;它使用深度学习技术帮助用户将文字和图片转换成高质量的图像&#xff0c;非常适合创作艺术作品、社交媒体内容、演示文稿、海报、视频和logo等。这个工具不仅支持文生图和图生图&#xff0c;还提供图像编辑功能&#xff0c…

2024年找工作怎么这么难?网工该何去何从?

2024年&#xff0c;找工作对很多人来说都变得更加艰难&#xff0c;网络工程师也不例外&#xff0c;仿佛是寒冬一般。 招聘岗位数量骤减&#xff0c;求职竞争加剧&#xff0c;很多人在职场上感受到前所未有的压力。 你可能觉得这是行业的末日&#xff0c;但实际上&#xff0c;这…

论文集搜索网站-dblp 详细使用方法

分享在dblp论文集中的两种论文搜索方式&#xff1a;关键字搜索&#xff0c;指定会议/期刊搜索。 关键字搜索 进入dblp官方网址dblp: computer science bibliography&#xff0c;直接在上方搜索栏&#xff0c;搜索关键字&#xff0c;底下会列出相关论文。 指定会议/期刊搜索 …

postgres导入sql文件的方法

首先&#xff0c;要打开CMD&#xff0c;cd到postgreSQL的bin路径 在下面这个例子里&#xff0c;player是数据库名称&#xff0c;postgres是用户名 添加完成之后&#xff0c;打开客户端 可以看到所有表已经全部导入

基于ssm框架的博客系统

基于ssm框架的博客系统的开发 ssm640基于ssm框架的博客系统的开发vue 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框…

如何着手创建企业数据目录?(四)数据质量与标准化

前文导读&#xff1a; 《如何着手创建企业数据目录&#xff1f;&#xff08;一&#xff09;数据目录的设定》 《如何着手创建企业数据目录&#xff1f;&#xff08;二&#xff09;数据的命名与维护》 《如何着手创建企业数据目录&#xff1f;&#xff08;三&#xff09;权限管理…