leetcode-2078-easy

思路一:分别用两个 map 记录最大值和最小值,然后遍历这两个 map 求得最大距离

public int maxDistance(int[] colors) {
       Map<Integer, Integer> min = new HashMap<>();
        Map<Integer, Integer> max = new HashMap<>();


        for (int i = colors.length - 1; i >= 0; i--) {
            min.put(colors[i], i);
        }

        for (int i = 0; i < colors.length; i++) {
            max.put(colors[i], i);
        }

        int result = 0;
        for (Map.Entry<Integer, Integer> e1 : min.entrySet()) {
            for (Map.Entry<Integer, Integer> e2 : max.entrySet()) {
                if (e1.getKey().equals(e2.getKey())) {
                    continue;
                }

                result = Math.max(result, e2.getValue() - e1.getValue());
            }
        }

        return result;
    }

思路二:更巧妙的解法,距离 D = | L - R |,解一定只有三种情况

  1. L = 0
  2. R = length - 1
  3. L = 0 && R = length - 1
    也就是数组的端点一定会是最小值或者最大值
    public int maxDistance(int[] colors) {
                int result = 0;
        int left = colors[0];
        for (int i = 1; i < colors.length; i++) {
            if (colors[i] != left) {
                result = i;
            }
        }

        int right = colors[colors.length - 1];
        for (int i = colors.length - 2; i >= 0; i--) {
            if (colors[i] != right) {
                result = Math.max(colors.length - 1 - i, result);
            }
        }

        return result;
    }
posted @   iyiluo  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示