目录
一.题目
1.题目详情
街上有 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 也可以产生最佳答案。
二.解题思路
1.利用双for循环来进行判断最大距离abs
2.第一个for遍历的是每个距离的起始位置i
3.第二个for遍历的是每个距离的结束位置j
4.他们的距离就是j-i
5.判断是否需要变更abs
三.代码
1.钻了测试数据空子的代码(雾)
class Solution {
public int maxDistance(int[] colors) {
int abs1=0,abs2=0;
int len=colors.length;
for(int i=1;i<len;i++)
if(colors[0]!=colors[i])
abs1=i;
for(int i=len-1;i>=0;i--)
if(colors[len-1]!=colors[i])
abs2=len-i-1;
return abs1>abs2 ? abs1:abs2;
}
}
2.正确的代码
class Solution {
public int maxDistance(int[] colors) {
int abs=0;
int len=colors.length;
for(int i=0;i<len;i++)
for(int j=i+1;j<len;j++)
if(colors[i]!=colors[j])
abs=Math.max(abs,j-i);
return abs;
}
}
四.题后语()
这道题就是最简单的遍历问题,直接使用暴力破解的方法对每个数据进行枚举就可以带到最终的答案,在写题的时候,看着他的测试用例,我是直接选择直接固定其开始位置为第一个或最后一个,然后对数组从前往后遍历一遍,在将数组从后往前遍历一遍,然后取最长的那一个,这个方法我感觉好像是钻了测试用例的漏洞,但是怎么想,也想不出一个反例,有没有大佬能举个栗子。