LeetCode每日打卡2033

该博客介绍了一道编程题目,要求在给定的二维整数网格上通过加减操作使得所有元素变为同一值,求最小操作次数。解决方案是首先计算网格的中值,然后对每个元素与中值的差进行判断,如果差能被x整除,则执行相应操作,否则返回-1。此题目的关键在于贪心策略的应用。
摘要由CSDN通过智能技术生成

给你一个大小为 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;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值