【LeetCode】594. 最长和谐子序列

594. 最长和谐子序列(简单)

在这里插入图片描述

【LeetCode】594. 最长和谐子序列_第1张图片

在这里插入图片描述

方法:哈希表计数

思路

  • 题目规定的「和谐子序列」中的最值差值正好为 1,因而子序列排序后必然符合[a,a,.., a +1,a+1]形式,即符合条件的和谐子序列长度为相邻两数(差值为 1)的出现次数之和
  • 因此,我们首先对 nums 各元素的出现次数计数,之后再次遍历,如果存在比该元素小 1 的元素,说明这两个元素会形成和谐子序列,此时将二者的出现次数相加,即为可能的答案之一。
  • 最后,将最佳答案与可能答案相比较,较大者更新为最佳答案。

代码

class Solution {
public:
    int findLHS(vector<int>& nums) {
        unordered_map<int, int> mp;
        int ans = 0;
        for (int n : nums){
            if(mp.find(n) == mp.end()){
                mp.insert({n, 1});
            }
            else mp[n]++;
        }
        for(auto m : mp){
            if(mp.find(m.first - 1) != mp.end()){
                ans = max(ans, m.second + mp[m.first - 1]);
            }
        }
        return ans;
    }
};

你可能感兴趣的:(LeetCode刷题,leetcode,算法,职场和发展)