594. 最长和谐子序列 --力扣 --JAVA

题目

和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。

现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。

数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。

解题思路

  1. 数组本身是无序的,所以需要将数组进行排序或将同一元素的数据收集起来(代码用的Map收集);
  2. 遍历收集好的数据,查看是否存在大于当前元素1的值,有的话相加计算;
  3. 返回结果最大的值;

代码展示

class Solution {
    public int findLHS(int[] nums) {
        int n = nums.length;
        if(n <= 1){
            return 0;
        }
        int ans = 0;
        Map data = new HashMap<>();
        for (int i = 0; i < nums.length; i++){
            data.put(nums[i], data.getOrDefault(nums[i], 0) + 1);
        }
        for (int num : data.keySet()){
            if(data.containsKey(num + 1)){
                ans = Math.max(data.get(num) + data.get(num + 1), ans);
            }
        }
        return ans;
    }
}

你可能感兴趣的:(力扣练习,算法,数据结构)