Weekly Contest
限制 :
1 <= nums.length <= 300
nums.length == numsi.length
1 <= nums[i][j] <= 4*106
就照題意檢查對角線是否是質數,但要注意找質數需要使用 O(sqrt(n)) 的算法,不然會TLE。
程式碼:
限制 :
1 <= nums.length <= 105
0 <= nums[i] <= 109
可以先紀錄每個value相同的index。對於同一個value的index,如果想要快速的求出每個index的解,可以利用sliding window的方式,可以做到O(n)求解。
程式碼:
參考這篇的寫法優化程式碼可讀性。
程式碼:
限制 :
1 <= nums.length <= 105
0 <= nums[i] <= 109
0 <= p <= (nums.length)/2
看到求minimum,就思考到可以使用binary search來思考最終的答案。這題的難點是怎麼確認nums裡是否有p個pair之間的差值小於等於某個值c。為了解決這個問題,我們可以採用greedy的做法。
演算法如下:
程式碼:
限制 :
m == grid.length
n == grid[i].length
1 <= m, n <= 105
1 <= m * n <= 105
0 <= grid[i][j] < m * n
grid[m - 1][n - 1] == 0
參考這篇,運用priority_queue優化dp的流程,將複雜度從O(n*m*(n+m))降低到O(n*m*(log(n)+log(m)))。
程式碼:
類似這篇的想法,想從前一篇的想法優化成bfs+greedy降低時間複雜度。對於每個row與column,紀錄他們已被探索的cell的最遠點,下一次要找該row或column時,直接從最遠點往後找即可。
但這個方法在遇到不連續的case會出問題,詳情請見以下測資。
[
[1,1,1,1,1],
[1,0,0,0,5],
[4,0,0,0,2],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0]
]
程式碼: