594. Longest Harmonious Subsequence

本文介绍了一种寻找数组中最长和谐子序列的算法,和谐子序列定义为子序列中最大值与最小值之差恰好为1。通过使用哈希表记录元素出现次数,实现了高效的解决方案。

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 subsequences.

Example 1:

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

从数组中找出一段子序列(不要求连续),要求子序列最大数和最小数之差为1,输出最长的长度。

C++(119ms):
 1 class Solution {
 2 public:
 3     int findLHS(vector<int>& nums) {
 4         unordered_map<int,int> Map ;
 5         int res = 0 ;
 6         for(int i : nums){
 7             Map[i]++ ;
 8         }
 9         for(auto it : Map){
10             if (Map.count(it.first -1)){
11                 res = max(res,it.second + Map[it.first -1]) ;
12             }
13         }
14         return res ;
15     }
16 };
 
 

 

 

 

java(79ms):
 1 class Solution {
 2     public int findLHS(int[] nums) {
 3         HashMap<Integer,Integer> map = new HashMap() ;
 4         int res = 0 ;
 5         for(int num :nums){
 6             map.put(num, map.getOrDefault(num,0)+1) ;
 7         }
 8         
 9         for(int num : map.keySet()){
10             if (map.containsKey(num + 1)){
11                 res = Math.max(res, map.get(num) + map.get(num+1)) ;
12             }
13         }
14         return res ;
15     }
16 }
 
 

 

 

Map.getOrDefault(Object, V)

Map的新方法getOrDefault(Object,V)允许调用者在代码语句中规定获得在map中符合提供的键的值,否则在没有找到提供的键的匹配项的时候返回一个“默认值”。

下一段代码列举对比了如何在JDK8之前检查一个map中匹配提供键的值是否找到,没找到匹配项就使用一个默认值是如何实现的,并且现在在JDK8中是如何实现的。

 1 /*
 2  * 示范Map.getOrDefault方法并和JDK8之前的实现方法做对比。JDK8
 3  * 中新增的Map.getOrDefault方法相比于传统的实现方法,所用的代码行数更少
 4  * 并且允许用一个final类型的变量来接收返回值。 
 5  */
 6 
 7 // JDK8之前的实现方法
 8 String capitalGeorgia = statesAndCapitals.get("Georgia");
 9 if (capitalGeorgia == null)
10 {
11    capitalGeorgia = "Unknown";
12 }
13 
14 // JDK8的实现方法
15 final String capitalWisconsin = statesAndCapitals.getOrDefault("Wisconsin", "Unknown");

Apache Commons包的DefaultedMap类提供了和新的Map.getOrDefault(Object, V)方法类似的功能。Groovy GDK中为Groovy包含了一个类似的方法,Map.get(Object,Object)

但是这个方法的行为有一点不同,因为它不仅仅在“键”没找到的时候返回提供的默认值,而且还会将键和默认值增加到调用的map中。

 

转载于:https://www.cnblogs.com/mengchunchen/p/7791917.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值