復(fù)盤|第304場周賽
使數(shù)組中所有元素都等于零
【貪心 + 哈希集合】模擬一遍這個過程,發(fā)現(xiàn)等價于len(set里非0元素數(shù)量)。
分組的最大數(shù)量
【貪心+數(shù)學(xué)】元素都是正數(shù),第一個組的元素越小越好。排序后,可以按照題目要求模擬。設(shè)組數(shù)為x,那么有x(x + 1)/2 ≤ n,最大的x為(-1 + √(1+8n)) / 2,取整數(shù)部分作為答案。
找到離給定兩個節(jié)點(diǎn)最近的節(jié)點(diǎn)
【直接遍歷】注意到內(nèi)向基環(huán)樹(森林)的性質(zhì),每個連通塊至多有一個環(huán),可以直接用一個簡單的循環(huán)求出距離數(shù)組,即node1到每個點(diǎn)的距離d1和node2到每個點(diǎn)的距離d2,遍歷d1和d2,ans = max(d1[i], d2[i])。如果不是基環(huán)樹就得用BFS。
圖中的最長環(huán)
【遍歷 + 時間戳】基環(huán)樹的最長環(huán)。時間戳clock=1,首次訪問一個點(diǎn)x時,記錄訪問這個點(diǎn)的時間time[xl=clock,然后將clock加一。如果首次訪問一個點(diǎn),則記錄當(dāng)前時間startTime=clock,從這個點(diǎn)出發(fā),看能否找到環(huán)。如果找到了一個之前訪問過的點(diǎn)x,且之前訪問x的時間不早于startTime,則說明找到了一個新的環(huán),此時的環(huán)長就是前后兩次訪問x的時間差,即clock一time[x]。