java数据结构与算法刷题-----LeetCode594. 最长和谐子序列

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

在这里插入图片描述

解题思路
  1. 子序列要尽可能长,并且最大值和最小值之间的差,必须为1。所以这道题的迷惑点在于,最大值最小值之间,可以插入任意个数的元素。
  2. 但是只要我们把数字列出来,2,2,2,3,3,3,你会发现,根本不能插入任何其它数字,例如2,2,2,1,3,3,3, 此时的差可不是1,而是3-1=2了。
  3. 因此,这道题可以理解为,找数组中两个数,相差为1,并且两个元素的出现次数相加为最多。
  4. 法一,hash表:时间复杂度O(n),空间复杂度O(n). 可以使用hash表,记录每个元素的出现次数,如果两个元素相差为1,就记录它们的出现次数,最终返回最大的出现次数。
  5. 法二,排序+双指针:时间复杂度O( n ∗ l o g 2 N n*log_2{N} nlog2N),空间复杂度O(1). 先对数组排序,然后left指针指向前一个元素,right指针指向后一个元素,如果相差为1,记录它们的长度
代码

法一:hash表
在这里插入图片描述

class Solution {public int findLHS(int[] nums) {//hashMap表,key:当前元素值,value:出现次数Map<Integer,Integer> map = new HashMap<>();int res = 0;//最多的出现次数//遍历数组,如果当前元素第一次遇到,直接放入map中,次数置为1//如果不是第一次遇到,获取它已经出现的次数,+1for(int num:nums) map.put(num,map.getOrDefault(num,0)+1);//遍历key值,寻找每个key,在map中是否存在比它大1的key,如果存在,那么他俩可以组成一个子序列//他俩各自的出现次数就是子序列的长度for(int key:map.keySet()){//如果找到了,那么我们只保存最大的子序列长度if(map.containsKey(key + 1)) res = Math.max(res,map.get(key)+map.get(key+1));}return res;}
}
  1. 法二:排序+双指针,排序使用快速排序,时间复杂度O( n ∗ l o g 2 n n*log_2{n} nlog2n),双指针遍历两遍数组,时间复杂度O(2N), 最终时间复杂度O( n ∗ l o g 2 n n*log_2{n} nlog2n),空间复杂度O(1)。
    在这里插入图片描述
class Solution {public int findLHS(int[] nums) {Arrays.sort(nums);//先对数组排序O(N*log2N)int left = 0, right = 0;//双指针,指向两个相邻的,值不同的元素int cnt = 0, max = 0;//while(right < nums.length){//右指针不能越界//如果left指向的元素,和right指向的元素的差 > 1,left后移while(nums[left] + 1 < nums[right]) left++;//如果left和right所指元素的差,正好差1,说明这两个数组成的序列,满足条件if(nums[right] == nums[left] + 1){//right所指向的元素的后面,如果是重复的值,right右移,直到不重复为止while(right<nums.length && nums[right] == nums[left] + 1) right++;right--;//前移一个,就是最后一个重复的值cnt = right - left + 1;//计算子序列长度max = Math.max(max, cnt);//只保留较大的子序列长度}right++;//右指针不断后移}return max;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】哈希表的开散列和闭散列模拟

哈希思想 在顺序和树状结构中&#xff0c;元素的存储与其存储位置之间是没有对应关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过多次的比较。 顺序查找的时间复杂度为0(N)&#xff0c;树的查找时间复杂度为log(N)。 我们最希望的搜索方式&#xff1a;通过元素…

磁盘分区和挂载

一、分区概念 1、基本概念 (1) 一块硬盘最多只能有4个主分区 (2) 其中一个(且最多只能有一个)主分区能作为扩展分区,而扩展分区不能写入数据,只能包含逻辑分区 2、格式化 分区之后的磁盘并不能直接使用&#xff0c;而是需要先进行格式化&#xff0c;又称为逻辑格式化。它是指…

2024牛客寒假算法基础集训营2

C Tokitsukaze and Min-Max XOR 题目大意 给定一个数组从任取数构成序列序列满足&#xff0c;&#xff08;可以只取一个数&#xff09;问能构造出多少个 解题思路 定找双枚举时间复杂度到&#xff0c;考虑利用加速统计的方案&#xff0c;即将数字按二进制位拆分挂在树上对于…

【学网攻】 第(26)节 -- 综合网络实验一

系列文章目录 目录 系列文章目录 文章目录 前言 一、综合实验 二、实验 1.引入 实验目标 实验设备 实验拓扑图 实验配置 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节…

【通讯录案例-保存开关状态 Objective-C语言】

一、接下来,我们要实现一个什么功能呢,在这个,我们的“通讯录”里边儿, 1.我们有两个开关,“记住密码”、“自动登录”、两个开关, 如果我们点击“记住密码”, 如果我们点击“记住密码”,然后呢,我把这个程序关了,我下一次再打开这个程序的时候,这个用户名和密码,…

【粉丝福利社】Flutter小白开发——跨平台客户端应用开发学习路线(文末送书-完结)

&#x1f3c6; 作者简介&#xff0c;愚公搬代码 &#x1f3c6;《头衔》&#xff1a;华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xf…

Linux第48步_编译正点原子的出厂Linux内核源码

编译正点原子的出厂 Linux 内核源码&#xff0c;为后面移植linux做准备。研究对象如下&#xff1a; 1)、linux内核镜像文件“uImage” 路径为“arch/arm/boot”&#xff1b; 2)、设备树文件“stm32mp157d-atk.dtb” 路径为“arch/arm/boot/dts” 3)、默认配置文件“stm32m…

IDEA Ultimate下载(采用JetBrain学生认证)

IDEA Ultimate版本下载 Ulitmate是无限制版&#xff08;解锁所有插件&#xff0c;正版需要付费。学生可以免费申请许可&#xff09;Community是开源社区版本&#xff08;部分插件不提供使用&#xff0c;比如Tomcat插件。免费&#xff09; 我们将通过学生认证获取免费版。 Je…

线性判别分析(LDA)

一、说明 LDA 是一种监督降维和分类技术。其主要目的是查找最能分隔数据集中两个或多个类的特征的线性组合。LDA 的主要目标是找到一个较低维度的子空间&#xff0c;该子空间可以最大限度地区分不同类别&#xff0c;同时保留与歧视相关的信息。 LDA 是受监督的&#xff0c;这意…

PKI - 借助Nginx实现_客户端使用自签证书供服务端验证

文章目录 Pre概述在 Nginx 中实现客户端使用自签名证书供服务器验证1. 生成客户端密钥对2. 生成自签名客户端证书3. 配置 Nginx4. 重启 Nginx 修5. 验证 在浏览器中安装客户端证书以便进行访问 Pre PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 PKI - 数…

接口测试框架分析

框架大体上已经写完了&#xff0c;不过说实话好多代码让我自己写我也写不出来&#xff0c;那该怎么办呢&#xff1f;很简单&#xff0c;把现在已经写好的代码保存起来&#xff0c;等用的时候拿出来复制粘贴就好了&#xff0c;如果你是大神&#xff0c;自己会写&#xff0c;那就…

mxxWechatBot主动发送消息至微信

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 免责声明&#xff1a;该工具仅供学习使用&#xff0c;禁止使用该工具从事违法活动&#xff0c;否则永久拉黑封禁账号&#xff01;&#xff01;&#xff01;本人不对任何工具的使用负责&am…