文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 map+两次扫描
    • 2.2 map+一次扫描

1. 题目

和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。

现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。

示例 1:
输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是:[3,2,2,2,3].
说明: 输入的数组长度最大不超过20,000.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-harmonious-subsequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 map+两次扫描

  • 一次扫描计数
  • 一次扫描判断前后迭代器key是否相差1,是,则将前后value相加(map是有序的)
class Solution {public:int findLHS(vector<int>& nums) {if(nums.empty())return 0;map<int,int> m;for(int num:nums)m[num]++;int len = 0;auto it1 = m.begin(), it2 = ++m.begin();for( ; it2 != m.end(); ++it2){if(it1->first+1 == it2->first)len = max(len, it1->second+it2->second);it1 = it2;}return len;}
};

2.2 map+一次扫描

  • 扫描到key,其value计数
  • 同时检查key-1,key+1,存在否,更新最大长度
class Solution {public:int findLHS(vector<int>& nums) {if(nums.empty())return 0;map<int,int> m;int len = 0;for(int num:nums){m[num]++;//len = max(len,max(m[num]+m[num-1],m[num]+m[num+1]));//错误//如果相邻的key不存在,答案就错了if(m.count(num-1))len = max(len, m[num]+m[num-1]);if(m.count(num+1) != 0)len = max(len, m[num]+m[num+1]);}return len;}
};

LeetCode 594. 最长和谐子序列(map)相关推荐

  1. Leetcode 594. 最长和谐子序列 C++

    Leetcode 594. 最长和谐子序列 题目 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1. 现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例: ...

  2. Leetcode 594. 最长和谐子序列

    和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1. 现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例 1:输入: [1,3,2,2,5,2,3,7] 输 ...

  3. leetcode 594 最长和谐子序列

    https://leetcode-cn.com/problems/longest-harmonious-subsequence/ 题目 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1 . ...

  4. leetcode 594. 最长和谐子序列python

    题目描述:  题解一: 本来打算用滑动窗口,但题目要求的子序列也不是连续的. 1.先将输入nums按照从小到大排序. 2.用一个dict记录nums中每个数字出现的次数,key为数字,value为出现 ...

  5. leetcode 594最长和谐子序列

    class Solution { public:int findLHS(vector<int>& nums) {int res=0;map<int,int> m;for ...

  6. 【LeetCode】594. 最长和谐子序列(js 实现)

    1.题目 594. 最长和谐子序列 - 力扣(LeetCode) (leetcode-cn.com) 2.实现 (1)方法一:哈希表(个人感觉这个更好理解,可能我对滑动窗口的做法不太熟悉吧) 代码 / ...

  7. ( 哈希表) 594. 最长和谐子序列 ——【Leetcode每日一题】

    ❓594. 最长和谐子序列 难度:简单 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 . 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度. ...

  8. 【快乐水题】594. 最长和谐子序列

    原题: 力扣链接:594. 最长和谐子序列 题目简述: 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 . 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐 ...

  9. 594. 最长和谐子序列

    和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1. 现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例 1: 输入: [1,3,2,2,5,2,3,7] ...

最新文章

  1. java项目新东方在线源码_基于JSP的在线考试系统-JavaWeb项目-有源码
  2. 业界丨AI公司魅力榜:谷歌最慷慨排第二,最抠门的你应该能想到
  3. android--------阿里 AndFix 热修复
  4. LDA基本介绍以及LDA源码分析(BLEI)
  5. proDAD Erazr便携版
  6. AI CC2018软件安装教程
  7. iphone开发之私有库private frameworks
  8. Android Studio升级到3.0,抛出Aapt2Exception异常
  9. leetcode(106)从中序遍历和后序遍历构建二叉树
  10. c语言调试的意义,C语言的调试
  11. Java实现仿QQ登陆、好友界面(可连接数据库)
  12. wps小写金额转大写快捷键_日记坊 - excel小写金额快速转换大写的几个小技巧
  13. 程序员如何选择外包平台
  14. html怎么设置空链接,HTML a标签之空链接
  15. 宝付浅谈物流无人机发展历程
  16. Qt,C++ 仿MAC桌面程序,DOCKBAR
  17. 项目分享之敲击床头盒控制床头灯的开关
  18. 任意列+左右两列等高布局,并要求有最小高度
  19. linux 内存 参数,linux free命令参数及用法详解(linux查看内存命令)
  20. 什么是代码签名?代码签名的好处

热门文章

  1. 【python】生成器
  2. [MathType需要安装新版的MT EXtra字体]解决方法
  3. POJ_1862 Stripies 【贪心】
  4. linux嵌入式开发流程,听听牛人怎么说
  5. python学习笔记(二十)初识面向对象
  6. 【opencv学习笔记八】创建TrackBar轨迹条
  7. 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern
  8. Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞
  9. 查看系统表存储过程名称
  10. QTreeWidget的基本操作