GuilinDev

Lc2078

05 August 2008

2078. Two Furthest Houses With Different Colors

给一个整数数组,数字代表不同颜色,找出两栋颜色不同且距离最远的房子,返回最远的距离

暴力就是两个for loop,这里用贪心算法

因为要最大,所以有三种情况:

  1. 首尾不相同直接返回,否则说明首尾是相同的颜色
  2. “0~右往左第一个不相同”这一段
  3. “左往右第一个不相同~length-1”这一段
  4. 然后比较这两个谁大就行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
    public int maxDistance(int[] colors) {
        int len = colors.length;

        // 如果首位颜色不同直接返回
        if (colors[0] != colors[len - 1]) {
            return len - 1;
        }

        // 获取左边第一个不相同的位置
        int left = 1;
        while (colors[left] == colors[0]) {
            left += 1;
        }
        // 获取右边第一个不相同的位置
        int right = len - 2;
        while (colors[right] == colors[len - 1]) {
            right -= 1;
        }

        // 0~right 的长度 和 left~length-1 的长度取最大值
        // 因为要最大,所以不可能在中间,要么就是左边,要么就是右边
        return Math.max(right, len - 1 - left);
    }
}