我想撰寫一個函式,它接收一個整數陣列并回傳一個長度為 2 的陣列,該陣串列示該陣列中包含的最大整數范圍。
范圍被定義為一組整數中的一組連續數字。例如,輸出陣列[2, 6]表示 range {2, 3, 4, 5, 6}。
假設只有非空陣列和一個最大范圍。
樣本輸入:array[1, 11, 3, 0, 15, 5, 2, 4, 10, 7, 12, 6]
樣本輸出:[0, 7]
下面的代碼適用于上面的示例,但對于以下輸入失敗,例如:array[8, 4, 2, 10, 3, 6, 7, 9, 1]誰的輸出應該是[6, 10]. 我的代碼產生[1, 4]. 有人可以幫忙嗎?
def largestRange(array):
array.sort()
initial = array[0]
start_idx = initial
final = initial
last_idx = final
length = 0
size = (final - initial 1)
for i in range(1,len(array)):
if array[i] - array[i-1] == 1 and i < len(array) - 1:
final = 1
elif array[i] - array[i-1] == 1 and i == len(array) - 1:
final =1
if size > length:
start_idx = initial
last_idx = final
else:
if size > length:
start_idx = initial
last_idx = final
length = size
initial = array[i]
final = initial
return [start_idx, last_idx]
(想法是每次序列中斷時更新 和 的值start_idx和)last_idxsize > length
uj5u.com熱心網友回復:
您需要對資料進行排序,然后獲取排序資料中可能的范圍 - 然后從中獲取最大范圍。
您應該累積所有找到的范圍并從中找到最大的范圍。使用您的代碼:
def largestRange(array):
array.sort()
initial = array[0]
last_idx = final
size = (final - initial 1)
ran = [] # collect ranges
for i in range(1,len(array)):
if array[i] - array[i-1] == 1 and i < len(array) - 1:
final = 1
elif array[i] - array[i-1] == 1 and i == len(array) - 1:
final = 1
ran.append( (initial, final) ) # add range
else:
ran.append( (initial, final) ) # add range
initial = array[i] # reset values
final = initial # reset values
# return the biggest found range
return max(ran, key=lambda n: n[1]-n[0])
data = [8, 4, 2, 10, 3, 6, 7, 9, 1]
print(largestRange(data))
給[6,10].
我問我有一個有時是連續的數字串列 - 如何從中獲取范圍串列?2天前,使用我針對該問題提出的解決方案,您可以解決您的問題
def get_consecutive_ranges(numbers: list[int]): """Takes an input of integers in a list, yields the ranges of consecutive numbers that form the list.""" if not numbers: return [] k = [] start,stop = None,None for num in numbers: if stop is None: start, stop = num, num elif stop == num-1: stop = 1 else: yield range(start,stop 1) start, stop = num, num yield range(start,stop 1)
data = [1, 11, 3, 0, 15, 5, 2, 4, 10, 7, 12, 6]
data.sort()
rg = get_consecutive_ranges(data)
# sort ranges by length ascending, take the last one
srg = sorted(rg, key=lambda g:len(g))[-1]
print([min(srg),max(srg))
去[0,7]。HTH。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/469103.html
標籤:数组 python-3.x
