Description:
給定一個m*n的矩陣跟x,如何使用最少的+x/-x讓grid內的所有數字相同
思考:
最後的uni-value一定會出現在既有的數字當中嗎?
先假設會好了,我也想不到不會的狀況
===
看了HINT,用最naive的想法做出來了
若有任一數%x的餘數與其它數字不同,那就不可能完成(再怎樣都彌補不了)
把陣列弄成1維的,sort,取中位數出來操作,end
===
昨天半夜突然收到訊息,人生關鍵節點++
焦慮,興奮
希望能快點把論文搞定
class Solution:
def minOperations(self, grid: List[List[int]], x: int) -> int:
m = len(grid)
n = len(grid[0])
reminder = grid[0][0] % x
nums = []
for i in range (m):
for j in range (n):
# 若餘數不同那就根本不可能做到
if grid[i][j] % x != reminder:
return -1
nums.append(grid[i][j])
nums.sort()
min_operation = 0
# 奇數case
if m*n % 2 == 1:
for i in range(len(nums)):
min_operation += abs(nums[i] - nums[len(nums)//2]) // x
# 偶數case
else:
temp0, temp1 = 0, 0
for i in range(len(nums)):
temp0 += abs(nums[i] - nums[len(nums)//2]) // x
temp1 += abs(nums[i] - nums[len(nums)//2-1]) // x
min_operation = min(temp0, temp1)
return min_operation