leetcode-594-Longest Harmonious Subsequence
阿新 • • 發佈:2018-05-04
ont note val find 其他 size define XP ()
題目描述:
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.
要完成的函數:
int findLHS(vector<int>& nums)
說明:
最大值和最小值相差1,vector裏面的數值又都是整數,所以我們要找的子數組只能包含最大值和最小值,不能有其他中間值。
所以我們找1有幾個,跟1相差1的(這裏我們找同方向的數)即2,有多少個。2有幾個,跟2相差1的(依然同個方向)即3,有多少個。
最終統計完,我們就可以知道最長的子數組有多少個元素了。
遍歷一遍vector,我們可以用map來存儲數值的個數。
然後再遍歷一遍map,按照上述方法統計各個子數組的長度,記錄最長的長度。
代碼如下:
int findLHS(vector<int>& nums)
{
unordered_map<int,int>m1;//采用unordered_map更快
for(int i=0;i<nums.size();i++)//存儲各種數字的個數
{
if(!m1.count(nums[i]))
m1[nums[i]]=1;
else
m1[nums[i]]++;
}
int max1=0;
for(unordered_map<int,int>::iterator iter=m1.begin();iter!=m1.end();iter++)
{
if(m1.count(iter->first+1))//如果存在大1的數
{
max1=max(max1,m1[iter->first+1]+iter->second);
}
}
return max1;
}
上述代碼簡潔,實測93ms,beats 74.88% of cpp submissions。
leetcode-594-Longest Harmonious Subsequence