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

LeetCode 每日一题笔记

0. 前言

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

1. 题目理解

问题描述 :

街上有 n 栋房子排成一列,给定数组 colors,colors[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²),暴力会超时
  • 面试高频简单题,思路固定、代码固定
相关推荐
维克兜率天5 分钟前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
罗西的思考43 分钟前
【轻量化复刻大模型】线性注意力交互式演示
人工智能·算法·机器学习
神也畏惧菠萝1 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
箓维1 小时前
TCP Socket的进阶实现
网络·笔记·tcp/ip
二哈赛车手1 小时前
新人笔记---hermes定时功能设计,具体讲解以及可优化点
java·人工智能·笔记·spring·ai·typescript
揽星河..1 小时前
【C语言】分支和循环
c语言·c++·算法
星恒随风2 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip
Fuyo_11193 小时前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
jktantan3 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript