【无标题】LeetCode第290场周赛

本文介绍了两种算法问题的解决方案。T1部分讲解了如何使用哈希表来快速求解二维数组的交集,通过计数每个元素出现的频次,找出在所有数组中都出现的元素。T2部分则探讨了如何避免陷入复杂的广度优先搜索,转而采用简单枚举方法来统计落在多个圆内的格点数量,提升了算法效率。
摘要由CSDN通过智能技术生成

T1:多个数组求交集
看到这个题的第一眼其实思路不太清晰,于是我跳到了第二题(没错,我就是这般没有毅力)然后看了眼第二题我又跳回来了,突然就觉得思路出来了。将二维数组中的所有元素全部用哈希表计数。最后返回元素个数为nums的长度就好了。

class Solution {
public:
    vector<int> intersection(vector<vector<int>>& nums) {
        unordered_map<int,int>hash;
        vector<int>res;
        int n=nums.size();
        for(int i=0;i<nums.size();i++){
            for(auto&c:nums[i]){
                hash[c]++;
            }
        }
        for(auto&[c,count]:hash){
            if(count==n)res.push_back(c);
        }
        sort(res.begin(),res.end());
        return res;
    }
};

T2:统计圆内格点数目
这个题我一开始就直接陷入了一个广度优先搜索里面出不来了。后来发现,其实可以直接枚举,把在范围内的所有点遍历一遍,找出符合要求的就好了。

class Solution {
public:
    int countLatticePoints(vector<vector<int>>& circles) {
        int count=0;
        for(int i=0;i<=200;i++){
            for(int j=0;j<=200;j++){
                for(auto &c:circles){
                    int x=c[0],y=c[1],r=c[2];
                    if((i-x)*(i-x)+(j-y)*(j-y)<=r*r){
                        count++;
                        break;
                    }
                }
            }
        }
        return count;
    }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值