安徽省建设业协会网站,服务器两个域名一个ip做两个网站,wordpress前台注册,网页案例集锦文章目录1. 题目2. 解题2.1 map两次扫描2.2 map一次扫描1. 题目
和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。
现在#xff0c;给定一个整数数组#xff0c;你需要在所有可能的子序列中找到最长的和谐子序列的长度。
示例 1:
输入: [1,3,2,2,5,2,3,7]
…
文章目录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(vectorint nums) {if(nums.empty())return 0;mapint,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-first1 it2-first)len max(len, it1-secondit2-second);it1 it2;}return len;}
};2.2 map一次扫描
扫描到key其value计数同时检查key-1,key1,存在否更新最大长度
class Solution {
public:int findLHS(vectorint nums) {if(nums.empty())return 0;mapint,int m;int len 0;for(int num:nums){m[num];//len max(len,max(m[num]m[num-1],m[num]m[num1]));//错误//如果相邻的key不存在答案就错了if(m.count(num-1))len max(len, m[num]m[num-1]);if(m.count(num1) ! 0)len max(len, m[num]m[num1]);}return len;}
};