競賽場T340口嗨解說
T1:N×N個方形格子透敌,需要你找出對角線的最大指數(shù)。
解法①:掃描+預(yù)處理質(zhì)數(shù)踢械,把質(zhì)數(shù)的范圍是[測試用例的范圍最小值-最大值這個區(qū)間]根據(jù)對聯(lián)線規(guī)律酗电,左上和右下構(gòu)成的對角線是的坐標(biāo)關(guān)系是是(r=c),左下和右上構(gòu)成的對角線的坐標(biāo)關(guān)系是(abs(r-c)=N-1)。預(yù)處理是假想内列,是為了方便頻繁查詢
T2:
解法①:用平衡二叉樹HashMap撵术,key是數(shù)字,value是分兩斷前綴與后后綴和话瞧,記前綴和是preSum,后綴和是suffixSum.
preSum+suffixSum+nums[i]=連續(xù)和
List,因為坐標(biāo)是增量的嫩与,比他小的數(shù)字在左邊,
比它大的數(shù)字在右邊
左邊的絕對值差值和是nums[ai]×(i-a0)-preSum(前綴和)
右邊的絕對值差值和是:
后綴和-nums[ai]×(j-i+1)
綜上所述:
總體時間復(fù)雜度是:O(2N)+NlogN
空間復(fù)雜度是:O(N)
解法②:能否一次過就能標(biāo)記出來交排,取決于絕對值的運算技巧划滋!
T3:
因為是最大差值最小值,不是最小差值最大值埃篓,如果是后者处坪,是可以排序完就可以一遍找出所有的數(shù)字,這個規(guī)模是每個數(shù)字與鄰居節(jié)點的絕對值差值都许,找差值用優(yōu)先隊列找第k個最小的稻薇。使用排序+貪心算法+二分,可以找每個數(shù)與最左端點胶征,和最右端點塞椎,以及左右鄰居節(jié)點,如果是最小差值最大化是可以排序一遍過睛低,選每個數(shù)的左右結(jié)點的差值案狠,然后大小剛好滿足題目需求的n/2向下取整服傍。
二分的check條件是統(tǒng)計當(dāng)前下標(biāo)數(shù)字是否滿足p,并用cnt記作當(dāng)前位置可以選中的數(shù)量,這個數(shù)量是符合線性遞增的骂铁。大于往右移2個單位吹零,小于往左邊移動一個單位。
這題的核心是需要找到二分的check拉庵,難度是比較高的灿椅。
另外解法是窮舉每個位置的規(guī)模,窮舉復(fù)雜度是N2钞支。 第一個位置的數(shù)字規(guī)模是n/2,第二個位置的數(shù)字規(guī)模是(n-1)/2,二分的核心引發(fā)的條件是這里茫蛹。二分的查找目標(biāo)是基于當(dāng)前點去找符合條件的數(shù)字,基于遞增排序明顯大于它的是右邊烁挟,所以很容易找婴洼。
T4:
想象為機器人移動,第一行和第一列的最大移動點是題目要求的區(qū)間撼嗓,初始位置左和下的移動點都是可以發(fā)散的柬采,這題的子問題是由條件決定,狀態(tài)由當(dāng)前移動到的目標(biāo)點來決定
解法①是可以用單調(diào)性+每一行的線性DP,DP有兩種狀態(tài)轉(zhuǎn)移且警,1是往左到目標(biāo)位置(右下角)粉捻,往下也是的≌裢澹可以計算一個點到目標(biāo)點的最小距離杀迹,如果對角線長度大于3個單位的最小路徑是兩步,如果是兩步或者一步可以直接返回押搪。單調(diào)棧的單調(diào)性是當(dāng)前行的移動位置的最大步數(shù)呈現(xiàn)遞增
解法②是BFS,把它想象成原點(0树酪,0)開始計數(shù),每一個格子都計算步數(shù)大州,把它想象成一個矩陣移動坐標(biāo)圖標(biāo)续语,按照左和下移覆蓋每個格子計算,每一行符合動態(tài)計算厦画。貪心動態(tài)計算下去疮茄,遇到當(dāng)前節(jié)點是目標(biāo)節(jié)點立即返回。
解法三:并查集根暑,找當(dāng)前坐標(biāo)的父節(jié)點力试,每次迭代優(yōu)化最短路徑,每次迭代都加入路徑排嫌,用路徑的可達(dá)坐標(biāo)與目標(biāo)坐標(biāo)進(jìn)行匹配畸裳。如果目標(biāo)節(jié)點和可達(dá)路徑匹配,需要立即返回
解法四:啟發(fā)性搜索淳地,用Nextkey,但是需要預(yù)處理
解法五是:BitSet
解法六是:基于時間復(fù)雜度允許的情況下怖糊,可以用優(yōu)先隊列暴力枚舉迭代帅容,行列的最大步數(shù)加入隊頭。
解法⑧是:逆向走
解法9:把行列轉(zhuǎn)換為一維數(shù)組伍伤,用線性樹維護(hù)并徘。把原點(0,0)作為根節(jié)點