領釦(LeetCode)最長和諧子序列 個人題解
阿新 • • 發佈:2018-11-05
和諧陣列是指一個數組裡元素的最大值和最小值之間的差別正好是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 returnmax; 22 } 23 }