2078.两栋颜色不同且距离最远的房子:一次遍历(脑筋急转弯)

【LetMeFly】2078.两栋颜色不同且距离最远的房子:一次遍历(脑筋急转弯)

力扣题目链接:https://leetcode.cn/problems/two-furthest-houses-with-different-colors/

街上有 n 栋房子整齐地排成一列,每栋房子都粉刷上了漂亮的颜色。给你一个下标从 0 开始且长度为 n 的整数数组 colors ,其中 colors[i] 表示第  i 栋房子的颜色。

返回 两栋 颜色 不同 房子之间的 最大 距离。

i 栋房子和第 j 栋房子之间的距离是 abs(i - j) ,其中 abs(x)x 的绝对值。

 

示例 1:

输入:colors = [1,1,1,6,1,1,1]
输出:3
解释:上图中,颜色 1 标识成蓝色,颜色 6 标识成红色。
两栋颜色不同且距离最远的房子是房子 0 和房子 3 。
房子 0 的颜色是颜色 1 ,房子 3 的颜色是颜色 6 。两栋房子之间的距离是 abs(0 - 3) = 3 。
注意,房子 3 和房子 6 也可以产生最佳答案。

示例 2:

输入:colors = [1,8,3,8,3]
输出:4
解释:上图中,颜色 1 标识成蓝色,颜色 8 标识成黄色,颜色 3 标识成绿色。
两栋颜色不同且距离最远的房子是房子 0 和房子 4 。
房子 0 的颜色是颜色 1 ,房子 4 的颜色是颜色 3 。两栋房子之间的距离是 abs(0 - 4) = 4 。

示例 3:

输入:colors = [0,1]
输出:1
解释:两栋颜色不同且距离最远的房子是房子 0 和房子 1 。
房子 0 的颜色是颜色 0 ,房子 1 的颜色是颜色 1 。两栋房子之间的距离是 abs(0 - 1) = 1 。

 

提示:

  • n == colors.length
  • 2 <= n <= 100
  • 0 <= colors[i] <= 100
  • 生成的测试数据满足 至少 存在 2 栋颜色不同的房子

解题方法:一次遍历

距离一个房子最远的异色房子,这个最远怎么找?当然是想优先寻找最左或最有的房子。
诶,那如果第一个房子和最后一个房子颜色不同,是不是就可以直接返回$n-1$了;
诶,那如果第一个房子和最后一个房子颜色不同,是不是就可以直接返回$n-1$了;

如果第一个房子和最后一个房子颜色相同,那么假如一个房子和它们颜色不同,这个房子的最远异色距离要么是与第一个房子的距离要么是与最后一个房子的距离。所以我们遍历一遍房子,更新异色房子的两个最远距离的最大值就好了。

  • 时间复杂度$O(n)$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
* @LastEditTime: 2026-04-20 21:51:36
*/
class Solution {
public:
int maxDistance(vector<int>& colors) {
int n = colors.size();
if (colors[0] != colors.back()) {
return n - 1;
}
int ans = 0;
for (int i = 1; i < n - 1; i++) {
if (colors[i] != colors[0]) {
ans = max(ans, max(i, n - i - 1));
}
}
return ans;
}
};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源


2078.两栋颜色不同且距离最远的房子:一次遍历(脑筋急转弯)
https://blog.letmefly.xyz/2026/04/20/LeetCode 2078.两栋颜色不同且距离最远的房子/
作者
发布于
2026年4月20日
许可协议