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中。

     
  • 相关阅读:
    mysql免安装版配置+navicat测试
    查询SQL Version详细信息
    拆分数据库测试之--收缩数据库
    测试拆分比较大SQL Server数据库
    SQL捕捉blocking信息
    T-SQL 重复读(Double Read)问题的理解
    Node.js版-七夕无事,人艰勿拆,求别说...
    css实现三角箭头(兼容IE6)
    前端开发的基础知识点摘要
    jQuery原理系列-常用Dom操作
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/7791917.html
Copyright © 2011-2022 走看看