力扣740-删除并获得点数

2024-02-19 06:32
文章标签 力扣 删除 点数 获得 740

本文主要是介绍力扣740-删除并获得点数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        当选了第i个数的时候就不能再选第i-1和第i+1的数,则在解题的时候可以考虑将原始数组转为可以利用动态规划算法的数组处理,这样就比较简单了。只是这样空间复杂度会增加一点。

package likou;
/** 删除并获得点数* 题干:* 	给你一个整数数组nums,你可以对它进行一些操作;* 	每次操作中,选择任意一个nums[i]删除它并获得 nums[i]的点数;* 	 	然后你必须删除所有等于nums[i]-1和nums[i]+1的元素* 	开始你拥有 0 个点数,返回你能通过这些操作获得的最大点数;*/
public class Demo740 {/** 假设输入数组为nums,其中1 <= nums[i] <= 10000* 删除第i个元素,int temp = nums[i];* 则要求删除num数组中所有值等于temp-1和temp+1的值,然后再重新选* 要求返回的数字最大,则肯定是要能选点数最多的数据尽可能多* 	所选的数据尽可能多* 设计思路:* 		步骤1.先定义一个数组,下标为nums[i]的值,则i需要取nums数组中的最大值*      步骤2.对nums数组遍历,下标为nums[i]的值,相当于把数组转为满足打家劫舍条件的数组*      步骤3,按打家劫舍算法对数据进行处理(如取了[i]的值,则[i-1]和[i+1]两个相邻的数据都不能选)*/public int deleteAndEarn(int[] nums) {int maxValue = nums[0];for (int i = 0; i < nums.length; i++) {int temp = nums[i];maxValue = Math.max(maxValue, temp);}int[] tempNums = new int[maxValue+1];for (int j = 0; j < nums.length; j++) {int tempNum = nums[j];tempNums[tempNum] = tempNums[tempNum] + nums[j];}int p1 = tempNums[0];int p2 = Math.max(p1, tempNums[1]);int p3 = 0;for (int k = 2; k <tempNums.length; k++) {p3 = Math.max(p1 + tempNums[k], tempNums[k - 1]);p1 = tempNums[k - 1];p2 = p3;}return p3;}public static void main(String args[]) {Demo740 demo = new Demo740();int[] nums = {2,2,3,3,3,4};System.out.println(demo.deleteAndEarn(nums));}
}

这篇关于力扣740-删除并获得点数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/723782

相关文章

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件?是否可以恢复永久删除的文件?或者最糟糕的是,如果文件直接被删除怎么办?本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件? “回收站清空后我还能恢复已删除的文件吗?” 答案是肯定的,但是在这种情况下您将需要一个  回收站恢复工具 来从回收站中检索文件: 错误/永久删除回收站或任何数字存储设备中的文件 直接删除的文件/

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的

Linux 删除 当前下的 mysql-8.0.31 空文件夹

在Linux中,如果你想要删除当前目录下的名为mysql-8.0.31的空文件夹(即该文件夹内没有任何文件或子文件夹),你可以使用rmdir命令。但是,如果mysql-8.0.31文件夹并非完全为空(即它包含文件或子文件夹),rmdir命令会失败。 如果你的目标是删除mysql-8.0.31文件夹及其内部的所有内容(无论是否为空),你应该使用rm命令结合-r(或-R,它们是等价的)选项来递归地删

如何删除不小心上传到git远程仓库中的.idea .iml文件

如果在开始的时候不配置,gitignore文件或者文件配置不正确,初始化上传的时候就会有一些不必要的信息上传上去 如果已经存在了一些文件在git远程仓库中,如。idea,.iml文件等。 首先在项目中定义一个  .gitignore文件,简单的实例如下也可以用idea中的gitignore插件 .DS_Storeclasses/*.settings/target/.classpath

Win8下如何快速查找和删除电脑中的病毒

Win8系统如何查找和删除病毒?检查你的电脑是否存在病毒的一种快速方法是使用 Windows Defender. 此恶意软件防护随 Windows 提供,可帮助识别和删除病毒、间谍软件和其他恶意软件。   注意:如果你使用的是 Windows RT,则 Windows Defender 会始终启用,并且不能关闭。   如果你使用的是 Windows 8,则可以根据自己的喜好运行由其他

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。 示例 1: 输入: nums = [1,2,3], head = [1,2,3,