LeetCode 每日一题笔记 日期:2026.04.20 题目:2078.两栋颜色不同而距离最远的房子

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.04.20
  • 题目:2078.两栋颜色不同而距离最远的房子
  • 难度:简单
  • 标签:贪心

1. 题目理解

问题描述

街上有 n 栋房子排成一列,给定数组 colorscolors[i] 表示第 i 栋房子颜色。

要求:找到两栋颜色不同 的房子,使它们下标距离最大。

距离 = abs(i - j)

示例

输入:colors = [1,1,1,6,1,1,1]

输出:3

解释:最远不同颜色对:0和3 或 3和6,距离均为3。

2. 解题思路

核心观察

  • 最大距离一定出现在:一端是最左(0号),另一端是最右(n-1号)
  • 如果两端颜色不同,答案直接是 n-1
  • 如果两端颜色相同,最优解只能是:
    1. 固定左端,从右往左找第一个不同颜色
    2. 固定右端,从左往右找第一个不同颜色
  • 取两者最大值即可

算法步骤

  1. 从左向右遍历,同时检查:
    • 左边界 i 与右边界 n-1 是否不同
    • 右边界 n-1-i 与左边界 0 是否不同
  2. 找到第一个满足条件的位置,直接返回当前最大距离
  3. 贪心保证第一次找到就是全局最优

3. 代码实现

java 复制代码
package lc2078;
class Solution {
    public int maxDistance(int[] colors) {
        int n = colors.length;
        for (int i = 0; i < n; i++) {
            if (colors[0] != colors[n - 1 - i] || colors[i] != colors[n - 1]) {
                return n - 1 - i;
            }
        }
        return 0;
    }
}

4. 代码优化说明

  • 贪心策略:只找第一个不同颜色,无需遍历全部
  • 一次循环同时检查左右两端,时间最短
  • 无额外空间,空间复杂度最优
  • 代码极简,面试可直接默写

5. 复杂度分析

  • 时间复杂度:O(n)
    最坏遍历一次数组
  • 空间复杂度:O(1)
    只使用临时变量,无额外空间

6. 总结

  • 本题属于贪心经典题:最大距离必然出现在两端
  • 核心思想:固定一端,向另一端找第一个不同颜色
  • 不需要暴力 O(n²),暴力会超时
  • 面试高频简单题,思路固定、代码固定
相关推荐
放羊郎2 小时前
基于ORB-SLAM2算法的优化工作
人工智能·算法·计算机视觉
mask哥2 小时前
力扣算法java实现汇总整理(上)
java·算法·leetcode
如果'\'真能转义说3 小时前
OOXML 文档格式剖析:哈希、ZIP结构与识别
xml·算法·c#·哈希算法
梦梦代码精4 小时前
BuildingAI 上部署自定义工作流智能体:5 个实用技巧
大数据·人工智能·算法·开源软件
Zephyr_05 小时前
Leedcode算法题
java·算法
问心无愧05135 小时前
ctf show web入门37
笔记
流年如夢6 小时前
栈和列队(LeetCode)
数据结构·算法·leetcode·链表·职场和发展
羊群智妍6 小时前
2026生成式AI搜索优化:GEO监测工具全解析
笔记
Hello.Reader7 小时前
算法基础(十)——分治思想把大问题拆成小问题
java·开发语言·算法