[Lc_week] 447 | 155 | Q1 | hash | pair {}调用

447_Q1

题解

复制代码
class Solution {
    typedef pair<int,int> PII;

    // 自定义哈希函数
    struct HashPII {
        size_t operator()(const PII& p) const {
            return hash<int>()(p.first) ^ (hash<int>()(p.second) << 1);
        }
    };

public:
    int countCoveredBuildings(int n, vector<vector<int>>& buildings) 
    {
         //不管有多远 至少存在一个建筑
        //bfs变形

        //哦不对,hash 快速查找同行同列,不就可以判断了吗

//添加自定义哈希函数HashPII,使用unordered_map<PII, bool, HashPII>解决pair作为键的问题
        unordered_map<PII,bool,HashPII> hash;
        int ans=0;
        for(auto& b:buildings)
            {
                PII p={b[0],b[1]};  //pair构造和调用 要用{}
                hash[p]=true;
            }
        for(auto& b:buildings)
            {
                int cnt=0;
                //四个 方向的查找
                //上
                for(int i=b[1]+1;i<=n;i++)
                    {
                        if(hash.count({b[0],i}))
                        {
                            cnt++;
                            break;
                        }
                    }
                for(int i=b[1]-1;i>=1;i--)
                    {
                        if(hash.count({b[0],i}))
                        {
                            cnt++;
                            break;
                        }
                    }
                for(int i=b[0]-1;i>=1;i--)
                    {
                        if(hash.count({i,b[1]}))
                        {
                            cnt++;
                            break;
                        }
                    }
                for(int i=b[0]+1;i<=n;i++)
                    {
                        if(hash.count({i,b[1]}))
                        {
                            cnt++;
                            break;
                        }
                    }
                if(cnt==4) ans++;
            }
        return ans;
    }
};©leetcode
  • pair 构造和调用 要用 {}
  • !!!!!!!!!!!!!!花括号

超时了

优化

  • 采取 行列极值法

    class Solution {
    public:
    int countCoveredBuildings(int n, vector<vector<int>>& buildings) {
    // 存 行位置极值和列位置极值
    unordered_map<int, int> row_min, row_max;
    unordered_map<int, int> col_min, col_max;

    复制代码
          for (auto& b : buildings) 
          {
              int x = b[0], y = b[1];
    
              // 预处理行极值
              if (!row_min.count(x) || y < row_min[x])
                  row_min[x] = y;
              if (!row_max.count(x) || y > row_max[x])
                  row_max[x] = y;
    
              // 预处理列极值
              if (!col_min.count(y) || x < col_min[y])
                  col_min[y] = x;
              if (!col_max.count(y) || x > col_max[y])
                  col_max[y] = x;
          }
          int ans = 0;
          for (auto& b : buildings) 
          {
              int x = b[0], y = b[1];
              bool up = (y < row_max[x]);
              bool down = (y > row_min[x]);
              bool left = (x > col_min[y]);
              bool right = (x < col_max[y]);
              if (up && down && left && right)
                  ans++;
          }
          return ans;
      }

    };©leetcode

155_Q1

复制代码
class Solution {
public:
    string findCommonResponse(vector<vector<string>>& responses) 
    {
        unordered_map<string,int> hash;
        for(auto& re:responses)
            {
                unordered_map<string,bool> check;
                for(auto& str:re)
                    {
                        if(!check[str])
                        {
                             check[str]=true;
                            hash[str]++; //确保 每一个 只加一次
                        }
                    }
            }
        pair<string,int> ret(responses[0][0],0);
        for(auto& [a,b]:hash)
            {
                string& f=ret.first;
                int& g=ret.second;
                if(b==g)
                {
                    if(a<f)
                        f=a;
                }
                if(b>g)
                {
                    f=a;
                    g=b;
                }
            }
        return ret.first;
    }
};
相关推荐
小O的算法实验室1 天前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生1 天前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿1 天前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz1 天前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能1 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****1 天前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能1 天前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能1 天前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo1 天前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ01 天前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法