class Solution {
public:
double getEdge(const vector<int>& point) { // 计算边界
return max(abs(point[0]), abs(point[1]));
}
int maxPointsInsideSquare(vector<vector<int>>& points, string s) {
long long limit = 1e9 + 1; //维护边界,边界仅在发生重复时才修改
int flag = 0; //边界是否被修改过
unordered_map<char, int> hashTable;
for(int i = 0; i < points.size(); i++){ //该loop用于确定边界
auto item = hashTable.find(s[i]);
if(item == hashTable.end()){ //发现新标签
int newEdge = max(abs(points[i][0]), abs(points[i][1]));
if(flag == 0) hashTable[s[i]] = i;
else if(newEdge <= limit) hashTable[s[i]] = i;
}
else{ //发现重复标签
vector<int> prePoint = points[item->second];
int preEdge = max(abs(prePoint[0]), abs(prePoint[1]));
int curEdge = max(abs(points[i][0]), abs(points[i][1]));
if(curEdge <= preEdge){
hashTable[s[i]] = i;
int tempLimit = preEdge - 1;
if(tempLimit < limit) limit = tempLimit;
}
else{
int tempLimit = curEdge - 1;
if(tempLimit < limit) limit = tempLimit;
}
}
}
int res = 0;
for(int i = 0; i < points.size(); i++){
if(getEdge(points[i]) <= limit) res++;
}
return res;
}
};
LeetCode3143.正方形中的最多点数
最新推荐文章于 2024-08-09 08:58:55 发布