1801-1810¶
1811-1820¶
1821-1830¶
1828.统计一个圆中点的数目¶
直接使用两点间距离公式就可以解决,需要注意的是迭代时使用auto &,节省了很多内存和时间。
class Solution {
public:
vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {
vector<int> result;
for(auto& query: queries){
int itor{};
for(auto& point:points) {
if(pow((query[0]-point[0]),2)+pow(query[1]-point[1],2)<=pow(query[2],2)) itor+=1;
}
result.emplace_back(itor);
}
return result;
}
};
1831-1840¶
1841-1850¶
1851-1860¶
1861-1870¶
1863. 找出所有子集的异或总和再求和¶
本题关键在于两点:
- 找到所有子集的情况,这里可以用二进制表示元素在不在子集中,子集存在的数量为,可以表示为1<<nums.size()。
- 找出每种情况中对应元素的情况并计算异或。这里使用
i&(1<<j)
表示第j位对应的元素是否在该子集中。
class Solution {
public:
int subsetXORSum(vector<int> &nums) {
int ans;
int sum = 0;
//循环所有枚举情况
for (int i = 0; i < (1 << nums.size()); i++) {
ans = 0;
//计算每种情况的异或和
for (int j = 0; j < nums.size(); j++) {
if (i & (1 << j)) {
ans ^= nums[j];
}
}
sum += ans;
}
return sum;
}
};