Leetcode-3143 正方形中的最多点数

Leetcode-3143 正方形中的最多点数

1. 题目描述

3143 正方形中的最多点数

2. 解题思路

(1) 对于每一个字符ch,我们维护一个最小的距离值,注意到字符总量的最大值为26;
(2) 维护一个全局次小距离值tmp,表示正方形内不能包含小于此值的坐标点;
(3) 最后统计所有符合题意的字符坐标点即可。

3. 代码实现

class Solution {
public:
    int maxPointsInsideSquare(vector<vector<int>>& points, string s) {
        int n = points.size();
        // 维护一个所有字符的次小距离
        // 对于每一个字符计算其最小距离
        // 正方形内不能包含大于等于次小距离的点
        vector<int> min_len(26, INT_MAX);
        int tmp = INT_MAX;
        for (int i = 0; i < n; i++) {
            int x = points[i][0], y = points[i][1], ch = s[i] - 'a';
            int dis = max(abs(x), abs(y));
            if (dis < min_len[ch]) {
                // dis是最小的,那么min_len[ch]是次小的,更新最小值与次小值
                tmp = min(tmp, min_len[ch]);
                min_len[ch] = dis;
            }
            // 更新次小值
            else {
                tmp = min(tmp, dis);
            }
        }
        int res = 0;
        for (auto dis : min_len) {
            // 若是小于次小值,则包含在正方形内部
            if (dis < tmp)
                res++;
        }
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值