演算法 正整數陣列的最優跳動方式 python

2021-10-23 01:15:57 字數 2213 閱讀 6307

題目:獲取乙個正整數陣列的最優跳動方式,要求如下:

1)從陣列中間的任意位置開始向右跳,每次跳動的步伐數不能超過該位置對應元素的值

2)在跳動次數最少的情況下計算每次跳動的步伐

#定義乙個樹節點,普通的樹

class ptree():

def __init__(self,index,lst = ):

self.index = index #樹的節點值 ,此處為列表的元素的下標

#孩子列表,ptree物件列表,列表物件一定要深度拷貝

self.child_lst = copy.deepcopy(lst)

import copy

#為nodei節點 新增孩子,nodei代表節點在列表中的小標位置,為其新增孩子列表

def addchildfornodei(nodei,lst):

length = len(lst)

#如果從此節點直接 跳到最右測,那麼它的孩子只有乙個:lst的最後乙個元素

if length - 1 -nodei.index <=lst[nodei.index]:

child = ptree(length - 1)

return

#否則,一次跳不完,那麼根據其值,新增所有可能的孩子

else:

for cc in range(1,lst[nodei.index]+1):

child = ptree(nodei.index+cc)

#迴圈巢狀,為孩子節點,再次新增孩子

addchildfornodei(nodei.child_lst[len(nodei.child_lst)-1],lst)

return

#建立乙個樹,普通的樹,從當前元素,所有可能的路,到達終點

def creattree(lst,i):

length = len(lst)

if length >3 and 0< i < length -1:

pass

else:

return none

#生成跟節點,為其增加孩子節點

root = ptree(i)

addchildfornodei(root,lst)

return root

import copy

#def addlst(node,lst_path):

if len(node.child_lst) ==0:

return

j_path_pos = 0###

#迴圈獲得,當前跟節點,所在的路徑,以便繼續完善

for i in range(len(lst_path)):

if node.index == lst_path[i][len(lst_path[i])-1]:

j_path_pos = i

break

#儲存當前路徑副本,並從元列表中刪除

j_path = lst_path.pop(j_path_pos)

#迴圈將孩子節點加入路徑中

for i in range(len(node.child_lst)):

tmp_path = copy.deepcopy( j_path)

#巢狀對每個孩子,僅需新增路徑

for i in range(len(node.child_lst)):

addlst(node.child_lst[i],lst_path)

#遍歷樹root,獲得所有根到葉子的路徑

def getlst(root):

lst_result = [[root.index]]

#巢狀迴圈,為當前節點獲取路徑

addlst(root,lst_result)

return lst_result

def fuuu():

lst = [2,3,4,1,5,2,6,1,7,3,4,1,5]

root = creattree(lst,2)

ll = getlst(root)

#對所有路徑排序,最短的為最快的

sorted(ll,key = lambda x :len(x))

short = len(ll[0])

for i in ll:

if short == len(i):

print(i)

else:

break

fuuu()

演算法習題 陣列中未出現的最小正整數

題目 給定乙個無序整型陣列arr,找到陣列中未出現的最小正整數。要求時間複雜度為o n 空間複雜度為o 1 例如 arr 1,2,3,4 返回1。arr 1,2,3,4 返回5。分析 這道題要理解最小正整數的意思,最小的正整數就是1,所以考察的方法就是在陣列中找1,然後找2,依次找下去.直到第乙個沒...

演算法 陣列中未出現的最小正整數

給定乙個無序整型陣列arr,找到陣列中未出現的最小正整數。例如 arr 1,2,3,4 返回1。arr 1,2,3,4 返回5。要求時間複雜度為o n 空間複雜度為o 1 在遍歷arr之前先生成兩個變數。變數l表示遍歷到目前為止,陣列arr已經包含的正整數範圍是 1,l 所以在沒有開始之前l 0,表...

陣列 正整數陣列分成2組使其和的差的絕對值最小

問題描述 把正整數陣列 a n 中的n個元素任意劃分成2部分,使得這2部分和的差的絕對值最小。演算法思路 問題可轉換成,從陣列中找出一組資料,使之盡可能等於陣列和sum的一半。那麼必然有他一半的和是 sum 2,接下來用0 1揹包問題來解!現在陣列元素即物品,元素值即使是揹包問題中的物品weight...