1025 反轉鍊錶python3無超時

2021-10-08 03:39:58 字數 2707 閱讀 4732

終於在卡了好幾天之後想到了解決辦法,這道題給出的**並不能保證完全成功,不超時的概率大概在50%

這個問題一般解決思路如下:

獲得正序鍊錶;

根據條件反轉鍊錶;

輸出鍊錶;

**如下:

#!/usr/bin/env python

# -*-coding:utf-8 -*-

'''@file : test.py

@time : 2020/04/01 10:24:29

@author : schiller xu

@version : 1.0

@contact : [email protected]

@desc : none

'''data=

input()

.split(

)first=data[0]

n=int

(data[1]

)k=int(data[2]

)nodes=

[input()

.split(

)for i in

range

(n)]r=[

]result=

while first!=

'-1'

:for node in nodes:

if node[0]

==first:

first=node[2]

break

for i in

range(0

,n,k):if

len(r[i:i+k]

)==k:

temp=r[i:i+k]

temp.reverse(

) result+=temp

else

: result+=r[i:i+k]

break

#range(n-1)會有乙個錯誤

for i in

range

(len

(result)-1

):result[i][2

]=result[i+1]

[0]result[-1

][2]

='-1'

for r in result:

print

(" "

.format

(r))

有乙個超時

嘗試過在獲取正常鍊錶的同時進行反轉,每讀取k個正常資料進行反轉一次,但是最終的效率並沒有提高多少。

最後想到可以不反轉鍊錶,直接控制鍊錶的輸出就行。控制輸出的時候,可以用資料1-8,間隔為3自己推演下,**有點亂。

#!/usr/bin/env python

# -*-coding:utf-8 -*-

'''@file : 1025-1.py

@time : 2020/07/11 19:26:26

@author : schiller xu

@version : 1.0

@desc : none

'''import sys

first_node,n,k=sys.stdin.readline(

).split()n=

int(n)

k=int

(k)#address-data

ad=dict()

#address-next

an=dict()

r=[]#讀取資料,生成字典

for _ in

range

(n):

a,d,n=sys.stdin.readline(

).split(

) ad[a]

=f' '

an[a]

=n#獲得正序鍊錶

while first_node!=

'-1'

: first_node=an[first_node]

#按照要求輸出「反轉」鍊錶

lens=

len(r)

ind=lens//k

for i in

range

(ind-1)

:for j in

range

((i+1)

*k-1

,i*k,-1

):sys.stdout.write(f' \n'

) sys.stdout.write(f' \n'

)for j in

range

((ind)

*k-1

,(ind-1)

*k,-1)

: sys.stdout.write(f' \n'

)try

: sys.stdout.write(f' \n'

)except

: sys.stdout.write(f' -1\n'

) exit(

)for j in

range

((ind)

*k,lens-1)

: sys.stdout.write(f' \n'

)sys.stdout.write(f' -1\n'

)

有乙個程式執行399ms的沒截下來,這道題目實在是喪心病狂。

1025 反轉鍊錶

在這道題中這其實是一道偽反轉鍊錶的題目,因為每乙個節點中其實沒有儲存指標的值,所以可以使用vector reverse來配合 自己的解法 給定乙個常數k以及乙個單鏈表l,請編寫程式將l中每k個結點反轉。例如 給定l為1 2 3 4 5 6,k為3,則輸出應該為3 2 1 6 5 4 如果k為4,則輸...

1025 反轉鍊錶

1025.反轉鍊錶 給定乙個常數k以及乙個單鏈表l,請編寫程式將l中每k個結點反轉。例如 給定l為1 2 3 4 5 6,k為3,則輸出應該為3 2 1 6 5 4 如果k為4,則輸出應該為4 3 2 1 5 6,即最後不到k個元素不反轉。輸入格式 每個輸入包含1個測試用例。每個測試用例第1行給出第...

1025 反轉鍊錶

給定乙個常數 k 以及乙個單鏈表 l,請編寫程式將 l 中每 k 個結點反轉。例如 給定 l 為 1 2 3 4 5 6,k 為 3,則輸出應該為 3 2 1 6 5 4 如果 k 為 4,則輸出應該為 4 3 2 1 5 6,即最後不到 k 個元素不反轉。每個輸入包含 1 個測試用例。每個測試用例...