844. Number Pair Statistics
Given a List <Point> p, find the number of (i,j) pairs that satisfy both p[i].x + p[j].x and p[i].y + p[j].y(i < j) can be divisible by 2.
Example
Example1
Input: p = [[1,2],[3,4],[5,6]]
Output: 3
Explanation:
p[0],p[1],p[2] Pairwise Covering, the sum of their x and y can be divided by 2
Example2
Input: p = [[0,3],[1,1],[3,4],[5,6]]
Output: 1
Explanation:
Only when p [2] and p [3] are combined, their sum of x and y can be divided by two.
Notice
- The length of given list
len <= 10000.
Input test data (one parameter per line)How to understand a testcase?
解法1:
这题其实是数学题。找出oddXoddY, oddXevenY, evenXoddY, evenXevenY这4个集合各有多少个元素,符合条件的解必然是这4个集合内部两两匹配。
class Solution {
public:
/**
* @param p: the point List
* @return: the numbers of pairs which meet the requirements
*/
int pairNumbers(vector<Point> &p) {
int n = p.size();
int oddXoddY = 0, oddXevenY = 0, evenXoddY = 0, evenXevenY = 0;
for (int i = 0; i < n; ++i) {
if (p[i].x & 0x1) {
if (p[i].y & 0x1) {
oddXoddY++;
} else {
oddXevenY++;
}
} else {
if (p[i].y & 0x1) {
evenXoddY++;
} else {
evenXevenY++;
}
}
}
int result = 0;
result = oddXoddY * (oddXoddY - 1) / 2 +
evenXevenY * (evenXevenY - 1) / 2 +
oddXevenY * (oddXevenY - 1) / 2 +
evenXoddY * (evenXoddY - 1) / 2;
return result;
}
};
本文探讨了如何在给定点集上寻找所有可能的点对,这些点对的x坐标和y坐标的和都能被2整除。通过将点分为四类:奇数x奇数y、奇数x偶数y、偶数x奇数y和偶数x偶数y,我们提出了一种高效的算法来解决这个问题。

被折叠的 条评论
为什么被折叠?



