博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
594. Longest Harmonious Subsequence
阅读量:4682 次
发布时间:2019-06-09

本文共 2632 字,大约阅读时间需要 8 分钟。

We define a harmonious array is an array where the difference between its maximum value and its minimum value is exactly1.

Now, given an integer array, you need to find the length of its longest harmonious subsequence among all its possible .

Example 1:

Input: [1,3,2,2,5,2,3,7]Output: 5Explanation: The longest harmonious subsequence is [3,2,2,2,3].

 

Note: The length of the input array will not exceed 20,000.

 

Approach #1: C++.

class Solution {public:    int findLHS(vector
& nums) { int size = nums.size(); unordered_map
temp; for (int i = 0; i < size; ++i) { temp[nums[i]]++; } vector
> v(temp.begin(), temp.end()); sort(v.begin(), v.end(), cmp); int ans = 0; for (int i = 1; i < v.size(); ++i) { if (v[i].first - v[i-1].first == 1) ans = max(ans, v[i].second + v[i-1].second); //cout << ans << endl; } return ans; } private: static bool cmp(pair
a, pair
b) { return a.first < b.first; }};

  

Approach #2: Java.

class Solution {    public int findLHS(int[] nums) {        HashMap
map = new HashMap<>(); int res = 0; for (int num : nums) { map.put(num, map.getOrDefault(num, 0) + 1); } for (int key : map.keySet()) { if (map.containsKey(key + 1)) res = Math.max(res, map.get(key) + map.get(key + 1)); } return res; }}

  

Approach #3: Python.

class Solution(object):    def findLHS(self, nums):        """        :type nums: List[int]        :rtype: int        """        count = collections.Counter(nums)        ans = 0        for x in count:            if x+1 in count:                ans = max(ans, count[x] + count[x+1])        return ans

  

Time Submitted Status Runtime Language
a few seconds ago 124 ms python
3 minutes ago 68 ms java
8 minutes ago 76 ms cpp

Analysis:

At the first time I can't understand this question's mean, after listening to the explanation. I understand that this question let you find the subarray which the difference with the maximum and the minimum equal to 1. In the first approach I use a vector to sort the map and then calculate the sum elements which two elements have the difference equal to 1. but in the second approach I found we can don't use vector and sort because we can find the number which bigger one than other with the method of .count.

 

转载于:https://www.cnblogs.com/ruruozhenhao/p/9985509.html

你可能感兴趣的文章
IT公司的等级观念
查看>>
百度编辑器ueditor1.4.3配置记录
查看>>
ubuntu12.04开启Framebuffer
查看>>
【问题和解决】python中nltk与nltk_contrib的关系
查看>>
闭包的探索
查看>>
内存泄漏
查看>>
编程之美 2.12 快速寻找满足条件的两个数 解法三证明 (算法导论 第二版 2.3-7 在n个元素的集合S中找到两个和为x的元素)...
查看>>
open_basedir restriction in effect,解决php引入文件权限问题
查看>>
微信小程序获取用户信息解密AES并且注意如何获取unionid
查看>>
JavaScript设计模式----1
查看>>
Qt实现半透明遮罩效果
查看>>
erlang调优方法
查看>>
Mysql linux -N命令
查看>>
daily scrum 12.5
查看>>
linux-ftp install
查看>>
NetXray
查看>>
局域网基本工作原理
查看>>
让历史告诉我们未来
查看>>
UVa540 Team Queue
查看>>
android 练习之路 (八)
查看>>