Leetcode算法學習日誌-594 Longest Harmonious Subsequence

Leetcode 594 Longest Harmonious Subsequence

題目原文

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.

Example 1:

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

Note:The length of the input array will not exceed 20,000.

題意分析

給定一串序列,找出一個最長子序列,使得最大和最小值之間差距剛好爲1.關鍵在於剛好爲1,也就是說子序列中只有兩種相差1的元素。

解法分析

由於所需子序列有且只有兩種元素,且相差爲1,所以可以用map將所有數字的個數記錄下來,再遍歷map,如果對於一個key,如果key+1也存在於map中,則存在以key和key+1兩個數字組成的和諧子序列,長度爲兩個數字的個數之和。C++代碼如下:

class Solution {
public:
    int findLHS(vector<int>& nums) {
        map<int,int> myCount;
        int res=0;
        int temp;
        for(int i=0;i<nums.size();i++)
            myCount[nums[i]]++;
        for(auto N:myCount)
            res=(myCount.count(N.first+1))?max(res,N.second+myCount[N.first+1]):res;
        return res;   
    }
};



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章