Leetcode 594.最长和谐子序列

最长和谐子序列

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

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

示例 1:

输入: [1,3,2,2,5,2,3,7]

输出: 5

原因: 最长的和谐数组是:[3,2,2,2,3].

说明: 输入的数组长度最大不超过20,000.

思路:

将数组中的元素作为key,该元素出现次数作为value存入哈希表。遍历哈希表,找出最长和谐子序列。

 1 import java.util.HashMap;
 2
 3 class Solution {
 4     public int findLHS(int[] nums) {
 5         int max=0;//最长和谐子序列的初值
 6
 7         //将数组中的值存入哈希表
 8         HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
 9         for(int i:nums) {
10             if(map.containsKey(i)) {
11                 map.put(i, map.get(i)+1);
12             }else {
13                 map.put(i, 1);
14             }
15         }
16
17         //遍历哈希表,找出最长和谐子序列
18         for(Integer i:map.keySet()) {
19             int value=map.get(i);
20             if(map.containsKey(i+1)) {
21                 int value2=map.get(i+1);
22                 if(value+value2>max) {
23                     max=value+value2;
24                 }
25             }
26         }
27         return max;
28     }
29 }

原文地址:https://www.cnblogs.com/kexinxin/p/10381403.html

时间: 2024-10-18 18:40:05

Leetcode 594.最长和谐子序列的相关文章

leetcode 594最长和谐子序列

class Solution { public: int findLHS(vector<int>& nums) { int res=0; map<int,int> m; for(auto num:nums) ++m[num]; for(auto a:m){ if (m.count(a.first+1)){ res=max(res,m[a.first]+m[a.first+1]); } } return res; } }; 原文地址:https://www.cnblogs.c

【leetcode 简单】 第一百四十六题 最长和谐子序列

和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1. 现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例 1: 输入: [1,3,2,2,5,2,3,7] 输出: 5 原因: 最长的和谐数组是:[3,2,2,2,3]. 说明: 输入的数组长度最大不超过20,000. from collections import Counter class Solution: def findLHS(self, nums): """ :type n

leetcode 673. 最长递增子序列的个数 java

题目: 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7].示例 2: 输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5.注意: 给定的数组长度不超过 2000 并且结果一定是32位有符号整数. 解题: 方法:动态规划 假设对于以 nums[i] 结尾的序列,我们知道最长序列的长度 le

Leetcode 673.最长递增子序列的个数

最长递增子序列的个数 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]. 示例 2: 输入: [2,2,2,2,2] 输出: 5 解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5. 注意: 给定的数组长度不超过 2000 并且结果一定是32位有符号整数. 思路 定义 dp(n,1) cnt (n,1) 这里我用dp[i]

leetcode 300. 最长上升子序列

题目 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4. 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可. 你算法的时间复杂度应该为 O(n2) . 进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗? 思路 先写了一个时间复杂度为O(n*n)的动态规划算法. 用一个数组dp[] 记录每个位置的最大递增子序列的长度 第

LeetCode 1143 最长公共子序列

链接:https://leetcode-cn.com/problems/longest-common-subsequence 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列. 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串.例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde&quo

[LeetCode] Longest Harmonious Subsequence 最长和谐子序列

We define a harmonious array is an array where the difference between its maximum value and its minimum value is exactly 1. Now, given an integer array, you need to find the length of its longest harmonious subsequence among all its possible subseque

leetcode 128. 最长连续子序列

题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入:[100, 4, 200, 1, 3, 2] 输出:4 即最长的连续序列为 [1,2,3,4] 思路分析: 由于要求O(n)的复杂读,因此直接排序是不可行的. 这里用到的是并查集的思想.对于每一个数,去查小于1和大于1的数是否在序列中.通过迭代求解. 尽管在 for 循环中嵌套了一个 while 循环,时间复杂度看起来像是二次方级别的.但其实它是线性的算法.因为只有当 current

594. Longest Harmonious Subsequence 最长的和谐子序列

Total Accepted: 5540 Total Submissions: 14066 Difficulty: Easy Contributors:love_Fawn We define a harmonious array is an array where the difference between its maximum value and its minimum value is exactly 1. Now, given an integer array, you need to