题目

类型:HashTable
image.png

解题思路

用一个哈希映射来存储每个数出现的次数,这样就能在 O(1) 的时间内得到 x 和 x + 1 出现的次数。

首先遍历一遍数组,得到哈希映射。
随后遍历哈希映射,设当前遍历到的键值对为 (x,value),那么查询 x+1 在哈希映射中对应的统计次数,就得到了 x 和 x+1 出现的次数,和谐子序列的长度等于 x 和 x + 1 出现的次数之和。

代码

  1. class Solution {
  2. public int findLHS(int[] nums) {
  3. HashMap <Integer, Integer> cnt = new HashMap <>();
  4. int res = 0;
  5. for (int num : nums) {
  6. cnt.put(num, cnt.getOrDefault(num, 0) + 1);
  7. }
  8. for (int key : cnt.keySet()) {
  9. if (cnt.containsKey(key + 1)) {
  10. res = Math.max(res, cnt.get(key) + cnt.get(key + 1));
  11. }
  12. }
  13. return res;
  14. }
  15. }