Every day a Leetcode
题目来源:3015. 按距离统计房屋对数目 I
 
解法1:暴力
暴力枚举每一个房屋对 (i, j) 的 3 种路径:
- i->j:长度为 len1 = j-i;
 - i->x->y->j:长度为 len2 = abs(i - x) + 1 + abs(j - y);
 - i->y->x->j:长度为 len3 = abs(i - y) + 1 + abs(j - x)。
 
取这 3 种路径的最小值作为房屋对 (i, j) 的路径,路径长度 len = min({len1, len2, len3}),因为路径是双向的,在答案数组 ans 中 ans[len - 1] += 2。
最后返回 ans 数组。
代码:
/*
 * @lc app=leetcode.cn id=3015 lang=cpp
 *
 * [3015] 按距离统计房屋对数目 I
 */
// @lc code=start
class Solution
{
public:
    vector<int> countOfPairs(int n, int x, int y)
    {
        vector<int> ans(n, 0);
        for (int i = 1; i < n; i++)
            for (int j = i + 1; j <= n; j++)
            {
                int len1 = j - i;                       // i->j
                int len2 = abs(i - x) + 1 + abs(j - y); // i->x->y->j
                int len3 = abs(i - y) + 1 + abs(j - x); // i->y->x->j
                // 取最短距离作为路径
                int len = min({len1, len2, len3});
                ans[len - 1] += 2; // 路径是双向的
            }
        return ans;
    }
};
// @lc code=end
 
结果:

复杂度分析:
时间复杂度:O(n2),其中 n 是房屋数量。
空间复杂度:O(n),其中 n 是房屋数量。

















