vector<int> twoOutOfThree(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3) { unordered_map<int, int> numMap1; unordered_map<int, int> numMap2; unordered_map<int, int> numMap3; for (auto i = 0; i < nums1.size(); i++) { auto num = nums1[i]; numMap1[num]++; } for (auto i = 0; i < nums2.size(); i++) { auto num = nums2[i]; numMap2[num]++; } for (auto i = 0; i < nums3.size(); i++) { auto num = nums3[i]; numMap3[num]++; } vector<int> result; for (int i = 1; i <= 100; i++) { int numCount = 0; numCount += static_cast<bool>(numMap1.count(i)) + static_cast<bool>(numMap2.count(i)) + static_cast<bool>(numMap3.count(i)); if (numCount > 1) { result.push_back(i); } } return result; }
2033. 获取单值网格的最小操作数
给你一个大小为 m x n 的二维整数网格 grid 和一个整数 x 。每一次操作,你可以对 grid 中的任一元素 加 x 或 减 x 。
单值网格 是全部元素都相等的网格。
返回使网格化为单值网格所需的 最小 操作数。如果不能,返回 -1 。
示例 1:
输入:grid = [[2,4],[6,8]], x = 2 输出:4 解释:可以执行下述操作使所有元素都等于 4 :
int minOperations(vector<vector<int>>& grd, int x) { int n = grd.size(); int m = grd[0].size(); vector<int> cnt(n * m); int index = 0; for(int i = 0; i < n; i ++){ for(int j = 0; j < m; j ++){ cnt[index++] = grd[i][j]; } } sort(cnt.begin(), cnt.end()); int t = cnt.size()/ 2; int 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; }