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


    目录
    相关文章
    |
    Python
    【Leetcode刷题Python】376. 摆动序列
    文章提供了解决LeetCode "摆动序列" 问题的Python实现代码,通过遍历整数数组并使用两个变量 down 和 up 来记录正差和负差摆动序列的长度,最终返回最长摆动子序列的长度。
    274 0
    |
    11月前
    |
    存储 C++ 索引
    最长连续序列(每天刷力扣hot100系列)
    本题使用哈希表法求最长连续序列。利用unordered_set存储去重元素,遍历集合时仅当num-1不存在时才作为起点向后扩展,统计连续长度,时间复杂度O(n),空间复杂度O(n)。相比unordered_map更高效,因无需存储值。
    |
    Go
    【LeetCode 热题100】DP 实战进阶:最长递增子序列、乘积最大子数组、分割等和子集(力扣300 / 152/ 416 )(Go语言版)
    本文深入解析三道经典的动态规划问题:**最长递增子序列(LIS)**、**乘积最大子数组** 和 **分割等和子集**。 - **300. LIS** 通过 `dp[i]` 表示以第 `i` 个元素结尾的最长递增子序列长度,支持 O(n²) 动态规划与 O(n log n) 的二分优化。 - **152. 乘积最大子数组** 利用正负数特性,同时维护最大值与最小值的状态转移方程。 - **416. 分割等和子集** 转化为 0-1 背包问题,通过布尔型 DP 实现子集和判断。 总结对比了三题的状态定义与解法技巧,并延伸至相关变种问题,助你掌握动态规划的核心思想与灵活应用!
    620 1
    |
    算法 Java
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    296 6
    |
    Python
    【Leetcode刷题Python】946. 验证栈序列
    LeetCode题目“946. 验证栈序列”的Python解决方案,通过模拟栈的压入和弹出操作来验证给定的两个序列是否能通过合法的栈操作得到。
    298 6
    |
    算法 Python
    【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
    本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
    246 3
    |
    Python
    【Leetcode刷题Python】105. 从前序与中序遍历序列构造二叉树
    LeetCode上105号问题"从前序与中序遍历序列构造二叉树"的Python实现,通过递归方法根据前序和中序遍历序列重建二叉树。
    429 3
    |
    存储 算法 Java
    LeetCode经典算法题:打家劫舍java详解
    LeetCode经典算法题:打家劫舍java详解
    359 2
    |
    人工智能 算法 Java
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    313 1
    |
    存储 算法 Java
    LeetCode经典算法题:预测赢家+香槟塔java解法
    LeetCode经典算法题:预测赢家+香槟塔java解法
    343 1

    热门文章

    最新文章