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 小时前
【ST表 前缀和】P7809 [JRKSJ R2] 01 序列|普及+
c++·算法·前缀和·洛谷·st表
Jet7692 小时前
2026年API中转平台选型笔记:稳定性、兼容性、成本怎么一起看
java·网络·笔记
X journey2 小时前
机器学习实践(18.5):特征工程补充
人工智能·算法·机器学习
LG.YDX2 小时前
笔试训练48天:mari和shiny(动态规划 - 线性dp)
数据结构·算法
m0_564876842 小时前
提示词应用
深度学习·学习·算法
qq_283720052 小时前
Transformer 高频面试题及答案
算法·面试·transformer
承渊政道2 小时前
【递归、搜索与回溯算法】(floodfill算法:从不会做矩阵题,到真正掌握搜索扩散思想)
数据结构·c++·算法·leetcode·矩阵·dfs·bfs
谭欣辰2 小时前
字典树:高效字符串处理利器
c++·算法
码农阿豪2 小时前
接手一个烂摊子之后:金仓数据库开发规范实战笔记
数据库·笔记·数据库开发