題目:獲取乙個正整數陣列的最優跳動方式,要求如下:
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...