街上有 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 。
思路一:不用多说,暴力两层for循环,找不同颜色的房子,取距离最远的。
代码(Python):
class Solution(object):
    def maxDistance(self, colors):
        result = 0
        for i in range(len(colors)-1):
            for j in range(i+1,len(colors)):
                if colors[i]!=colors[j]:
                    result = max(result,abs(j-i))
        return result
思路二:其实不难证明,颜色不同且距离最大的房子,其中的一个房子肯定在边界上。
假如共有5个房子,假设颜色不同且距离最大的房子出现在中间,那就说明边界的两个房子颜色相同,都记为颜色0,最大的若是第二个和第四个房子颜色不同,那这两个房子的颜色至少有一个和边界房子的颜色不同,可以自己举一些例子试试看,比如房子二是颜色1,房子四是颜色2,那这两个房子的距离没有房子二到房子五的距离大;再换个例子,比如房子二是颜色0,房子四是颜色1,那这两个房子的距离没有房子一到房子四的距离大;因此我们可以进行两次查找,第一次固定左边界,找右边出现的颜色不同且距离最大的;第二次固定右边界,找左边出现的颜色不同且距离最大的,最后取这两个距离的更大的值作为答案。
代码(Python):
class Solution(object):
    def maxDistance(self, colors):
        result1 = 0                  #保存从左往右找的最大距离
        result2 = 0                  #保存从右往左找的最大距离
        left = 0
        right = len(colors) - 1 
        while left <= right:
            if colors[left] != colors[right]:
                result1 = max(result1,abs(right-left))
                break
            else:
                left += 1
        left = 0
        right = len(colors) - 1   
        while left <= right:
            if colors[left] != colors[right]:
                result2 = max(result2,abs(right-left))
                break
            else:
                right -= 1
        return max(result1,result2)    #取更大的距离
 

















