给你一个大小为 m x n 的二维整数网格 grid 和一个整数 x 。每一次操作,你可以对 grid 中的任一元素 加 x 或 减 x 。
单值网格 是全部元素都相等的网格。
返回使网格化为单值网格所需的 最小 操作数。如果不能,返回 -1 。
示例 1:
输入:grid = [[2,4],[6,8]], x = 2
输出:4
解释:可以执行下述操作使所有元素都等于 4 :
- 2 加 x 一次。
- 6 减 x 一次。
- 8 减 x 两次。
共计 4 次操作。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-operations-to-make-a-uni-value-grid
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这次的题挺简单的,贪心 验证其中成员与中值的差是否能整除x,不能就返回-1
class Solution {
public:
int minOperations(vector<vector<int>>& grd, int x) {
int n = grd.size();
int m = grd[0].size();
vector<int> cnt;
for(int i = 0; i < n; i ++){
for(int j = 0; j < m; j ++){
cnt.push_back(grd[i][j]);
}
}
sort(cnt.begin(), cnt.end());
int t = cnt.size()/ 2;
long long res = 0;
for(int i = 0; i < cnt.size(); i ++){
if(cnt[i] != cnt[t]){
int k = abs(cnt[i] - cnt[t]);
if(k % x == 0) res += k / x;
else return -1;
}
}
return res;
}
};