| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【LeetCode】LeetCode之删除并获得点数——动态规划、排序+动态规划 -> 正文阅读 |
|
[数据结构与算法]【LeetCode】LeetCode之删除并获得点数——动态规划、排序+动态规划 |
1.题目描述 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。 示例 1:
示例 2:
提示:
2.思路分析Ⅰ 根据题目求最大点数,我们首先能够想到的就是使用动态规划求解。通过迭代+记忆集能够解题。
怎么将值转换为索引呢?
那么新数组的索引存储什么呢?
3.动态规划解题 下面的rob方法就和打家劫舍一样了:打家劫舍
复杂度分析
4.思路分析Ⅱ 说到底本题不能直接使用动态规划的原因就是你无法保证前面操作的数据是否会对后续造成影响,比如说[2,3,4,1,6,7,1],你如果要操作2,那么数组中的3和1都要进行删除,而这3和1是由于无法确定位置,我们很难在迭代过程中对其进行联系的。另外可以通过排序+划分子序列来完成
4.排序+动态规划 注意到若 nums 中不存在某个元素 x,则选择任一小于 x 的元素不会影响到大于 x 的元素的选择。因此我们可以将nums 排序后,将其划分成若干连续子数组,子数组内任意相邻元素之差不超过 11。对每个子数组按照方法一的动态规划过程计算出结果,累加所有结果即为答案。
复杂度分析:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/30 15:24:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |