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

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

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

示例 1:

file

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

示例 2:

file

输入: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 栋颜色不同的房子
  1. 暴力
    Python:

    class Solution:
    def maxDistance(self, colors: List[int]) -> int:
        k = len(colors)
        for i in range(k, 0, -1):
            for j in range(k-i+1):
                if colors[j] != colors[j+i-1]:
                    return i-1

    Java:

    class Solution {
    public int maxDistance(int[] colors) {
        int k = colors.length;
        for(int i = k; i > 0; i--)
        {
            for(int j = 0; j < k-i+1; j++)
            {
                if(colors[j] != colors[j+i-1])
                    return i-1;
            }
        }
        return 0;
    }
    }
  2. 贪心
    Python:

    class Solution:
    def maxDistance(self, colors: List[int]) -> int:
        k = len(colors)
        result = 0
        for i in range(k-1, 0, -1):
            if colors[i] != colors[0]:
                result = max(result, i)
                break
        for j in range(0, k-1):
            if colors[j] != colors[k-1]:
                result = max(result, k-1-j)
                break
        return result

    Java:

    class Solution {
    public int maxDistance(int[] colors) {
        int k = colors.length;
        int result = 0;
        for(int i = 0, j = k-1; i < k; i++, j--)
        {
            if(colors[i] != colors[0] || colors[j] != colors[k-1])
                result = Math.max(i, k-i-j);
        }
        return result;
    }
    }
最后修改日期: 2022年1月21日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。