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²),暴力会超时
  • 面试高频简单题,思路固定、代码固定
相关推荐
摇滚侠8 分钟前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 15
java·spring boot·笔记
摇滚侠38 分钟前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 14
spring boot·笔记·后端
重生之后端学习41 分钟前
239. 滑动窗口最大值[困难]✅
java·数据结构·算法·leetcode·职场和发展
fpcc1 小时前
算法和数据结构—动态规划法
数据结构·算法·动态规划
陈年老古董3 小时前
OpenCV图像处理笔记:图像拼接、答题卡识别与目标提取
人工智能·笔记·python·opencv·计算机视觉
陈年老古董3 小时前
CentOS编译安装Python3.11完整教程
linux·笔记·学习·centos·python3.11
星星.7224 小时前
C++算法竞赛|二分查找与二分答案:边界模板、浮点二分、STL
数据结构·c++·算法
sel_94 小时前
【OPD论文导读(二)】OPD(On-Policy Distillation)全景调研:十篇论文讲透“在自己生成的内容上学习“这件事
人工智能·python·深度学习·学习·算法·语言模型
动词ing4 小时前
【学习笔记】数据结构(数组长度和关键特性+快慢指针+左右指针)
数据结构·笔记·学习
老当益壮梁奶奶4 小时前
Linux 软件编程学习笔记(六):线程编程入门与实践
linux·c语言·c++·笔记·学习