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²),暴力会超时
  • 面试高频简单题,思路固定、代码固定
相关推荐
threerocks1 小时前
Jev 入门第一课
算法
西柚研究生1234562 小时前
论文分析17:YOLOv11_UAVNet:无人机航拍图像专用目标检测算法
人工智能·python·深度学习·算法·目标检测
小李不想当小白2 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
hetao17338373 小时前
2026-09-17 hetao1733837 的刷题记录
c++·算法
午彦琳3 小时前
2026.9.17
数据结构·算法·leetcode
木井巳4 小时前
【记忆化搜索】不同路径
java·算法·leetcode·深度优先·剪枝·推荐算法
2601_965384264 小时前
口腔黏膜清洁的工程化路径:从表面形貌表征到清洁策略匹配
经验分享·笔记
泡泡鱼(敲代码中)4 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
怕浪猫5 小时前
从 Windows 换到 Mac 三个月,我真香了
算法·面试·架构
aichitang20246 小时前
前端小skill
前端·人工智能·算法·ai·前端框架