1. 程式人生 > >領釦(LeetCode)最長和諧子序列 個人題解

領釦(LeetCode)最長和諧子序列 個人題解

和諧陣列是指一個數組裡元素的最大值和最小值之間的差別正好是1。

現在,給定一個整數陣列,你需要在所有可能的子序列中找到最長的和諧子序列的長度。

示例 1:

輸入: [1,3,2,2,5,2,3,7]
輸出: 5
原因: 最長的和諧陣列是:[3,2,2,2,3].

說明: 輸入的陣列長度最大不超過20,000.

 

這道題問題很簡單,但是一開始理解錯題意,認為陣列的子序列是擷取陣列的某一部分而不能改變其位置。

參考相關程式碼後發現是任意子序列。那麼使用hashmap記錄出現的數和其對應出現的次數,兩個大小相差1的數的長度之和 中最大的一組,就是最長的和諧子序列。

程式碼如下:

 1 class Solution {
 2     public int findLHS(int[] nums) {
 3         Map<Integer, Integer> map=new HashMap<>();
 4         for (int i : nums) {
 5             if(!map.containsKey(i))
 6             {
 7                 map.put(i, 1);
 8             }
 9             else
10             {
11 map.put(i, map.get(i)+1); 12 } 13 } 14 int max=0; 15 for (int i : map.keySet()) { 16 if(map.containsKey(i+1)) 17 { 18 max=Integer.max(map.get(i)+map.get(i+1), max); 19 } 20 } 21 return
max; 22 } 23 }