#30516: 求大神修改(python) 換了一種寫法最後一筆測資跑不過呢QAQ 麻煩了,謝謝


chiugt0817@gmail.com (Bonjour)

學校 : 臺北市立陽明高級中學
編號 : 157566
來源 : [223.136.30.133]
最後登入時間 :
2022-06-09 21:07:52
c291. APCS 2017-0304-2小群體 -- 2017年3月APCS | From: [36.224.211.8] | 發表日期 : 2022-05-27 02:18

不太懂為甚麼這樣寫會TLE

前九筆都成功AC 就最後一筆跑不過

n = int(input())
list1 = [int(c) for c in input().split()]
posit = [0]*n
count = 0
for i in list1:
  if posit[i]==0:
    head = i
    j = -1
    while head!=j:
      posit[i] = 1
      j = list1.index(i)
      i = j
    else:
      count+=1
print(count)
 
 
 
#32508: Re: 求大神修改(python) 換了一種寫法最後一筆測資跑不過呢QAQ 麻煩了,謝謝


tobycoding0501@gmail.com (Kaze Code)

學校 : 不指定學校
編號 : 197603
來源 : [210.71.32.17]
最後登入時間 :
2023-05-25 13:36:19
c291. APCS 2017-0304-2小群體 -- 2017年3月APCS | From: [106.64.175.27] | 發表日期 : 2022-10-17 21:04

不太懂為甚麼這樣寫會TLE

前九筆都成功AC 就最後一筆跑不過

n = int(input())
list1 = [int(c) for c in input().split()]
posit = [0]*n
count = 0
for i in list1:
  if posit[i]==0:
    head = i
    j = -1
    while head!=j:
      posit[i] = 1
      j = list1.index(i)
      i = j
    else:
      count+=1
print(count)
 
 


這題也是困擾了我一陣子,而我最一開始的寫法也是這樣

後來想了一下,在資料數目大的時候,count每次都只有+1,這樣就需要判斷很多次

因此我將count那部分用index函數來宣告

程式碼如下:

total = int(input())
people = tuple(map(int,input().split()))
track = [0] * total
groups = 0

while 0 in track:
    j = track.index(0)

    while not track[j]:
        track[j] = 1
        j = people[j]
       

    groups += 1
   

print(groups)
 
#33706: Re: 求大神修改(python) 換了一種寫法最後一筆測資跑不過呢QAQ 麻煩了,謝謝


a110608@ctes.ylc.edu.tw (鍾均)

學校 : 不指定學校
編號 : 183626
來源 : [163.27.215.243]
最後登入時間 :
2023-10-23 10:25:34
c291. APCS 2017-0304-2小群體 -- 2017年3月APCS | From: [39.9.196.35] | 發表日期 : 2023-01-24 21:52

不太懂為甚麼這樣寫會TLE

前九筆都成功AC 就最後一筆跑不過

n = int(input())
list1 = [int(c) for c in input().split()]
posit = [0]*n
count = 0
for i in list1:
  if posit[i]==0:
    head = i
    j = -1
    while head!=j:
      posit[i] = 1
      j = list1.index(i)
      i = j
    else:
      count+=1
print(count)
 
 


不要用list.index()!!!它很慢

 
ZeroJudge Forum