IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode_哈希表_简单_594.最长和谐子序列 -> 正文阅读

[数据结构与算法]LeetCode_哈希表_简单_594.最长和谐子序列

1.题目

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

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

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

示例 1:
输入:nums = [1,3,2,2,5,2,3,7]
输出:5
解释:最长的和谐子序列是 [3,2,2,2,3]

示例 2:
输入:nums = [1,2,3,4]
输出:2

示例 3:
输入:nums = [1,1,1,1]
输出:0

提示:
1 <= nums.length <= 2 * 104
-109 <= nums[i] <= 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-harmonious-subsequence

2.思路

(1)排序 & 暴力穷举法
该方法比较容易想到,具体步骤如下:
① 即先将数组 nums 进行排序,并定义变量 maxLen 来保存最长和谐子序列,其初始值为 0;
② 枚举所有的子数组,如果当前子数组 nums[i…j] 的最大值和最小值的差正好为 1,则更新 maxLen = Math.max(maxLen, j - i + 1)
③ 遍历结束后,直接返回 maxLen 即可。

注意:排序之后所枚举的子数组就可以看作排好序的子序列,而题目只需求解最长和谐子序列的长度,所以排序后的子序列不会影响最终结果。

(2)哈希表
① 使用 hashMap 记录数组 nums 中的元素以及对应出现的次数,并定义变量 maxLen 来保存最长和谐子序列,其初始值为 0;
② 遍历 hashMap 中所有的键 num,如果 hashMap 中存在键 num + 1(记 num 和 num + 1 出现的次数依次为 cnt1 和 cnt2),那么由 cnt1 个 num 和 cnt2 个 num + 1 所组成的子序列正好是一个和谐子序列,此时更新 maxLen = Math.max(maxLen,cnt1 + cnt2);
③ 遍历结束后,直接返回 maxLen 即可。

3.代码实现(Java)

//思路1————排序 & 暴力穷举法
class Solution {
    public int findLHS(int[] nums) {
        Arrays.sort(nums);
        int length = nums.length;
        // maxLen 保存最长和谐子序列,初始值为 0
        int maxLen = 0;
        for (int i = 0; i < length; i++) {
            for (int j = i + 1; j < length; j++) {
                if (nums[i] + 1 == nums[j]) {
                    maxLen = Math.max(maxLen, j - i + 1);
                }
            }
        }
        return maxLen;
    }
}
//思路2————哈希表
class Solution {
    public int findLHS(int[] nums) {
	    // hashMap 记录数组 nums 中的元素以及对应出现的次数
        Map<Integer, Integer> hashMap = new HashMap<>();
        for (int num : nums) {
            hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
        }
        // maxLen 保存最长和谐子序列,初始值为 0
        int maxLen = 0;
        for (Integer num : hashMap.keySet()) {
            if (hashMap.containsKey(num + 1)) {
                maxLen = Math.max(maxLen, hashMap.get(num) + hashMap.get(num + 1));
            }
        }
        return maxLen;
    }
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:19:25  更:2022-09-24 21:20:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 16:02:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码