Leetcode第1620题:网络信号最好的坐标(Coordinate with maximum network quality)

解题思路

第一种:暴力枚举

题目给出坐标的范围是[0,50],可以直接枚举所有坐标点(i,j),计算每个坐标点的信号强度,然后找出信号强度最大的坐标点。
核心代码如下:

class Solution {
public:
    vector<int> bestCoordinate(vector<vector<int>>& towers, int radius) {
        int mx = 0;
        vector<int> ans = {0, 0};
        for (int i = 0; i < 51; ++i) {
            for (int j = 0; j < 51; ++j) {
                int t = 0;
                for (auto& e : towers) {
                    double d = sqrt((i - e[0]) * (i - e[0]) + (j - e[1]) * (j - e[1]));
                    if (d <= radius) {
                        t += floor(e[2] / (1 + d));
                    }
                }
                if (mx < t) {
                    mx = t;
                    ans = {i, j};
                }
            }
        }
        return ans;
    }
};

第二种:遍历输入坐标

遍历到一个坐标时,计算与其他坐标的distance和信号强度,保存到一个数组中,最后找出信号强度最大的坐标。
难点在如何满足相同强度的坐标返回离原点最小的坐标。
代码待完善:

class Solution {
public:
    float getDistance(vector<int>& t1, vector<int>& t2) {
        return sqrt((t2[1]-t1[1])*(t2[1]-t1[1]) + (t2[0]-t1[0])*(t2[0]-t1[0]));
    }

    bool isContainCoor(vector<int>& t1, vector<int>& t2, int radius) {
        float d = getDistance(t1, t2);
        return (d < radius) ? true:false;
    }

    int qualityBetween(vector<int>& t1, vector<int>& t2) {
        return ( floor(t2[2] / (1+getDistance(t1, t2))) );
    }
    
    vector<int> bestCoordinate(vector<vector<int>>& towers, int radius) {
        vector<int> qualitys;
        for (int i = 0; i < towers.size(); i++)
        {
            int tempQuality = towers[i][2];            
            for (int j = 0; j < towers.size(); j++)
            {
                if (i != j && isContainCoor(towers[i], towers[j], radius))
                {
                    tempQuality += qualityBetween(towers[i], towers[j]);
                }
            }
            qualitys.push_back(tempQuality);
        }
        
        int retIdx = max_element(qualitys.begin(), qualitys.end()) - qualitys.begin();
        vector<int> ret = { towers[retIdx][0], towers[retIdx][1]};
        return ret;
    }
};
posted @ 2022-11-02 13:13  hql5  阅读(74)  评论(0)    收藏  举报