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

简介: 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。

 题目

和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 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<Integer,Integer> 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;
        }
    }

    image.gif


    目录
    相关文章
    |
    2月前
    |
    算法 Java
    LeetCode(一)Java
    LeetCode(一)Java
    |
    4月前
    |
    算法 Java
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    58 6
    |
    4月前
    |
    存储 算法 Java
    LeetCode经典算法题:打家劫舍java详解
    LeetCode经典算法题:打家劫舍java详解
    79 2
    |
    4月前
    |
    人工智能 算法 Java
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    55 1
    |
    4月前
    |
    存储 算法 Java
    LeetCode经典算法题:预测赢家+香槟塔java解法
    LeetCode经典算法题:预测赢家+香槟塔java解法
    70 1
    |
    5月前
    |
    Arthas 监控 算法
    JVM成神路终章:深入死磕Java虚拟机序列总纲
    JVM成神路终章:深入死磕Java虚拟机序列总纲
    126 1
    |
    4月前
    |
    存储 算法 Java
    LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
    LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
    84 0
    |
    4月前
    |
    算法 Java
    LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
    LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
    59 0
    |
    4月前
    |
    存储 算法 Java
    LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
    LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
    49 0
    |
    4月前
    |
    算法 Java 索引
    LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
    LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
    40 0