LeetCode 594. 最长和谐子序列

题目描述

594. 最长和谐子序列

image-20221025224819591

思路分析

解法一:哈希计数(推荐)

核心思路

  • 统计每个数字的出现次数。
  • 只需检查相邻数值 xx+1 的组合。
  • 取出现次数之和的最大值即可。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示数组长度。
  • 空间复杂度:O(n),用于哈希表。
import java.util.HashMap;
import java.util.Map;

class Solution {
    public int findLHS(int[] nums) {
        Map<Integer, Integer> count = new HashMap<>();
        for (int num : nums) {
            count.put(num, count.getOrDefault(num, 0) + 1);
        }

        int res = 0;
        for (int num : count.keySet()) {
            if (count.containsKey(num + 1)) {
                res = Math.max(res, count.get(num) + count.get(num + 1));
            }
        }

        return res;
    }
}
func findLHS(nums []int) int {
	count := make(map[int]int)
	for _, num := range nums {
		count[num]++
	}

	res := 0
	for num, c := range count {
		if v, ok := count[num+1]; ok {
			if c+v > res {
				res = c + v
			}
		}
	}

	return res
}

相似题目

题目 难度 考察点
128. 最长连续序列 中等 哈希
532. 数组中的 k-diff 数对 中等 哈希
217. 存在重复元素 简单 哈希
219. 存在重复元素 II 简单 哈希
349. 两个数组的交集 简单 哈希
本文作者:
本文链接: https://hgnulb.github.io/blog/2023/49504652
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!