zoukankan      html  css  js  c++  java
  • 594. 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 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中。

     
  • 相关阅读:
    legend3---图片裁剪实例代码
    JPG 和 JPEG 格式有什么区别
    jpg与png图片的优缺点
    心得体悟帖---200320(legend3它的真实意义,在于资质提升,一举多得)
    心得体悟帖---200320(觉得录课录不下去了,可以去招聘市场找找激励,这个真的特别有效)
    心得体悟帖---200320(我必不甘于人之下,所以还是得自己干,自己好好录课)
    ES6参考---Promise对象
    范仁义js课程---70、sort方法
    JS实现异步编程的4种方法(总结)
    JS执行机制详解
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/7791917.html
Copyright © 2011-2022 走看看