Leetcode算法题1801-1900


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. 找到所有子集的情况,这里可以用二进制表示元素在不在子集中,子集存在的数量为,可以表示为1<<nums.size()。
  2. 找出每种情况中对应元素的情况并计算异或。这里使用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;
    }
};

1871-1880

1881-1890

1891-1900


文章作者: 不二
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 不二 !
  目录