最長的可整合子陣列的長度

2021-09-26 06:18:38 字數 971 閱讀 1756

題目

先給出可整合陣列的定義。如果乙個陣列在排序後,每相鄰兩個數的差的絕對值都是1,則該陣列為可整合陣列。例如,[5,3,4,6,2]排序之後為[2,3,4,5,6],符合條件,所以這個陣列為可整合陣列。 

給定乙個整型陣列arr,請返回其中最大可整合子陣列的長度。例如,[5,5,3,2,6,4,3]的最大可整合子陣列為[5,3,2,6,4],所以返回5

思路: 時間複雜度o(n^2)

依舊是窮舉每乙個子陣列,但是在判斷子陣列是否是可整合陣列時並不採用排序的方法,而是採用如下方法:

判斷子陣列中是否有重複元素,如果有,肯定不是可整合陣列。這個過程可以使用雜湊表完成。

找到子陣列中的最大值max和最小值min,及其相應的下表 i 和 j ,如果 max - min == j - i,則該子陣列一定是可整合陣列;否則不是。

這個過程的時間複雜度o(1),所有整體的時間複雜度是o(n^2)。實現**如下:

def getlil2(arr):

import sys

if arr == none or len(arr) == 0:

return 0

length = 0

map_ = {}

for i in range(len(arr)):

max_ = -sys.maxsize

min_ = sys.maxsize

for j in range(i,len(arr)):

if arr[j] in map_:

break

map_[arr[j]] = 1

max_ = max(arr[j],max_)

min_ = min(arr[j],min_)

if max_ - min_ = j - i:

length = max(length,j-1+1)

map_.clear()

return length

最長的可整合子陣列的長度

一 題目描述 先給出可整合陣列的定義。如果乙個陣列在排序之後,每相鄰兩個數差的絕對值都為1,則該陣列為可整合陣列。例如,5,3,4,6,2 排序之後為 2,3,4,5,6 符合每相鄰兩個數差的絕對值都為1,所以這個陣列為可整合陣列。給定乙個整型陣列arr,請返回其中最大可整合子陣列的長度。例如,5,...

最長可整合子陣列

先給出可整合陣列的定義 如果乙個陣列arr在排序之後,從最小值到最大值的順序中,每相鄰兩個數之間差的絕對值都為1,則arr為可整合陣列。例如 arr 再排序之後為 排序後符合每相鄰兩個數之間差的絕對值都為1,所以arr是可整合陣列。給定乙個整形陣列arr,請返回其中長度最大的可整合子陣列的長度。5,...

最長可整合陣列

先給出可整合陣列的定義。如果乙個陣列在排序之後,每相鄰兩個數差的絕對值都為1,則該陣列為可整合陣列。例如,5,3,4,6,2 排序之後為 2,3,4,5,6 符合每相鄰兩個數差的絕對值都為1,所以這個陣列為可整合陣列。給定乙個整型陣列arr,請返回其中最大可整合子陣列的長度。例如,5,5,3,2,6...