題目
難度:★☆☆☆☆
類型:數組
和諧數組是指一個數組里元素的最大值和最小值之間的差別正好是1。
現在,給定一個整數數組,你需要在所有可能的子序列中找到最長的和諧子序列的長度。
示例
輸入: [1,3,2,2,5,2,3,7]
輸出: 5
原因: 最長的和諧數組是:[3,2,2,2,3].
說明: 輸入的數組長度最大不超過20,000.
解答
這道題有一個好處是不需要考慮數組中元素的先后順序,大大簡化了分析流程,我們可以把數組當成一個集合處理。
統計數組中每個元素出現的次數,并存放在字典當中,對于字典中每一條記錄,查看某一元素num+1后是否出現在字典中,如果也出現在字典中,則num與num+1可以組成和諧數組,計算所有和諧數組長度的最大值即可。
這里我們使用python中的Counter函數進行元素的快速統計。
class Solution:
def findLHS(self, nums):
num_count, res = Counter(nums), 0 # 統計列表中各個元素出現次數,并初始化結果為零
for num, count in num_count.items(): # 考察字典中每一條數字-次數對
if num+1 in num_count.keys(): # 如果數字+1也在字典中
res = max(num_count[num]+num_count[num+1], res) # 組成和諧數組并統計當前最大長度
return res
如有疑問或建議,歡迎評論區留言~