力扣262周赛


力扣第262场周赛吴自华题解

强者就是通过不断地高效训练训练出来的,同时充满着热爱,使自己能够坚持下去,获得属于自己的好成绩!

第二题:
我的:

class Solution {
public:
    int minOperations(vector>& grid, int x) {
        vector rs;
        int ans=0;
        for (vector>::iterator i=grid.begin();i!=grid.end();++i) for (vector::iterator j=(*i).begin();j!=(*i).end();++j) rs.push_back(*j);
        sort(rs.begin(),rs.end());
        int len=(int)rs.size();
        int l1,l2,r1,r2;
        if (len&1){
            l1=r1=len/2;
            l2=l1-1;r2=r1+1;
            for (int i=0;i
class Solution {
public:
    int minOperations(vector>& grid, int x) {
        // 说实话,这个求m和n的方式我竟然没有想到,这也是对vector也理解深入了
        int n = grid.size(), m = grid[0].size(), mod = grid[0][0] % x;
        //直接发现了数学本质-->同余 ...而我(上面的)仅仅知识发现了是在数轴上,然后进行了判断的模拟,显得十分麻烦
        vector v;
        for (auto &row : grid)
            for (int cell : row) {
                if (cell % x != mod)
                    return -1;
                v.emplace_back(cell / x);
            }
        int mid = n * m / 2;
        //用nth_element可能更节省时间,只做了要做的事情(虽然的确也多做了一点)
        nth_element(v.begin(), v.begin() + mid, v.end());
        int ans = 0;
        for (int vi : v)
            ans += abs(vi - v[mid]);
        return ans;
    }
};

作者:吴自华
链接:https://leetcode-cn.com/circle/discuss/2ELXyY/view/DxDKIC/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

第三题作者直接使用了map和multiset两个功能性比较强,比价合适的数据结构

对于map有序性以及unordered_map 的无序性等性质,自然要理解 他们内部实现的哈希表和红黑树两个典型数据结构

而set和multiset都是用平衡二叉树实现的,但multiset允许重复元素出现

第四题待续(要先把最长树链这个东西搞掉再说):