题解 | #数组中的最长连续子序列#
数组中的最长连续子序列
http://www.nowcoder.com/practice/eac1c953170243338f941959146ac4bf
#
# max increasing subsequence
# @param arr int整型一维数组 the array
# @return int整型
#
class Solution:
def MLS(self , arr ):
# write code here
import heapq
k = 1
maxc = 1
heapq.heapify(arr) #建小根堆
x = heapq.heappop(arr) #把最小的值赋值给x并弹出数组
while len(arr): #当数组中全部元素都被弹出时就跳出循环
y = heapq.heappop(arr) #把下一个最小值赋值给y并弹出数组
if y == x + 1: #如果相邻的两个最小值为连续自然数
k += 1 #该子序列连续的个数加一
if k > maxc: #如果该子序列连续的个数较多
maxc = k #则为最长子序列
x = y #将y的值给到x,便于与下一个最小值进行判断
if y == x:
continue
else: #如果下一个最小值不连续
k = 1 #对新的子序列重新计数
x = y
return maxc