LeetCode 594——最长和谐子序列

编程入门 行业动态 更新时间:2024-10-24 08:25:43

LeetCode 594——最长和谐子<a href=https://www.elefans.com/category/jswz/34/1769864.html style=序列"/>

LeetCode 594——最长和谐子序列

一、题目介绍

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

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

示例 1:

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

来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

(1)哈希映射方法:确定每个元素x在数组出现过的次数保存在map中,再遍历数组nums,记录x和x+1在数组中出现的次数即为和谐数组的长度。

(2)双指针方法:首先给数组排序,然后利用双指针的特性进行比较和统计。

三、解题代码

(1)哈希映射方法:
int findLHS(vector<int>& nums) {map<int,int> mp;//记录每个值出现的次数for(int i =0; i < nums.size(); ++i){mp[nums[i]]++;}int res = 0;//设当前数为x,只需找到当前数组中x和x+1的个数,这些元素组成的即为和谐数组for(int i = 0; i < nums.size(); i++){if(mp[nums[i]+1])res = max(res, mp[nums[i]]+mp[nums[i]+1]); //记录最长的和谐数组的长度}return res;}(2)双指针方法:
int findLHS(vector<int>& nums) {sort(nums.begin(), nums.end()); int l = 0, res = 0;for(int j = 0; j < nums.size(); ++j){while(nums[j] - nums[l] > 1) //前后元素之差大于1l++;if(nums[j] - nums[l] == 1)  //前后元素之差恰好等于1res = max(res, j-l+1);}return res;}

四、解题结果

更多推荐

LeetCode 594——最长和谐子序列

本文发布于:2024-02-26 21:12:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1703923.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:序列   最长   和谐   LeetCode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!