復(fù)盤|第334場周賽
左右元素和的差值
【前綴和】一次遍歷計算前綴和及后綴和,最后算answer,可以不用數(shù)組,直接用變量存。
找出字符串的可整除數(shù)組
【模擬】注意到太長會溢出,所以可以從前往后遍歷,把前綴乘10再加上后一個位置的數(shù),即把x更新為(10x + d) mod m。[證明:(a+b) mod m = (a mod m + b mod m) mod m]
求出最多標(biāo)記下標(biāo)
【雙指針】先排序,然后從一半的位置開始往右找nums[r],如果2?nums[l] > nums[r],r往右移動一格,一旦找到2?nums[i] <= nums[j],cnt+=2,l和r同時右移一格。
【貪心 + 雙指針】小的nums[i]有限匹配,所以排序后,在右半部分找到第一個滿足2*nums[0]≤nums[j]的j,nums[1]只能匹配j右邊的數(shù)。
【二分】如果能匹配k對(i,j),也能匹配小于k對,這是答案的單調(diào)性,可以二分,可證排序后,如果存在k對匹配,一定能讓最小的k個數(shù)和最大的k個數(shù)匹配。所以,nums[0]要匹配nums[n-k],nums[i]要匹配nums[n - k + i],如果對于所有0≤i<k都有2*nums[i] nums[n - k + i],則可以匹配k對。
在網(wǎng)格圖中訪問一個格子的最少時間
【Dijkstra】設(shè)dis[i] [j]為到達(i,j)的最小時間,dis[0] [0] = 0, ans = dis[m - 1] [n - 1],每條邊權(quán)視為1。如果要走的格子有到達時間限制,需要來回踱偶數(shù)步(如果是出發(fā)點那就沒空間踱步,則當(dāng)前格子沒法走)。
【二分 + BFS】假設(shè)在時刻endtime到終點,那么從終點出發(fā)如果能到起點,說明可以在大于endtime的時刻到終點,反之則不能,有單調(diào)性就能二分。