领扣(LeetCode)最长和谐子序列 个人题解
和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。
现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。
示例 1:
输入: [1,3,2,2,5,2,3,7] 输出: 5 原因: 最长的和谐数组是:[3,2,2,2,3].
说明: 输入的数组长度最大不超过20,000.
这道题问题很简单,但是一开始理解错题意,认为数组的子序列是截取数组的某一部分而不能改变其位置。
参考相关代码后发现是任意子序列。那么使用hashmap记录出现的数和其对应出现的次数,两个大小相差1的数的长度之和 中最大的一组,就是最长的和谐子序列。
代码如下:
1 class Solution { 2 public int findLHS(int[] nums) { 3 Map<Integer, Integer> map=new HashMap<>(); 4 for (int i : nums) { 5 if(!map.containsKey(i)) 6 { 7 map.put(i, 1); 8 } 9 else 10 { 11 map.put(i, map.get(i)+1); 12 } 13 } 14 int max=0; 15 for (int i : map.keySet()) { 16 if(map.containsKey(i+1)) 17 { 18 max=Integer.max(map.get(i)+map.get(i+1), max); 19 } 20 } 21 return max; 22 } 23 }
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 「EF Core」框架是如何识别实体类的属性和主键的
· 独立开发,这条路可行吗?
· 我在厂里搞 wine 的日子
· 如何通过向量化技术比较两段文本是否相似?
· 35+程序员的转型之路:经济寒冬中的希望与策略
· 推荐 5 款实用的 Docker 可视化管理工具,工作效率翻倍!
· JavaScript面试题,为什么[] + 0 = '0', 而{} + 0 = 0?
· 简单记录下最近2个月完成的线上系统迁移工作
· 独立开发第二周:构建、执行、规划
· 瞧瞧别人家的接口重试,那叫一个优雅!