Longest Harmonious Subsequence问题及解法

来源:互联网 发布:怎么改路由器的mac地址 编辑:程序博客网 时间:2024/06/09 21:18

问题描述:

We define a harmonious array is an array where the difference between its maximum value and its minimum value is exactly 1.

Now, given an integer array, you need to find the length of its longest harmonious subsequence among all its possible subsequences.

示例:

Input: [1,3,2,2,5,2,3,7]Output: 5Explanation: The longest harmonious subsequence is [3,2,2,2,3].

问题分析:

将数组排序后,计算每个数出现的次数,相邻的数之差绝对值若为1,则将两数出现的次数相加得到一个和sum,统计sum的最大值即可。


过程详见代码:

if(nums.empty()) return 0;        sort(nums.begin(), nums.end());int first = 1, second = 1;int res = 0;int a, b;int i = 0;while (i + 1 < nums.size() && nums[i] == nums[i + 1]){first++;i++;}a = nums[i];        i++;for (; i < nums.size();i++){b = nums[i];while (i + 1 < nums.size() && nums[i] == nums[i + 1]){second++;i++;}if (b - a == 1) res = max(res, first + second);first = second;second = 1;a = b;}return res;