LeetCode 2078. 两栋颜色不同且距离最远的房子

简介: LeetCode 2078. 两栋颜色不同且距离最远的房子

文章目录


1. 题目

2. 解题


1. 题目


街上有 n 栋房子整齐地排成一列,每栋房子都粉刷上了漂亮的颜色。给你一个下标从 0 开始且长度为 n 的整数数组 colors ,其中 colors[i] 表示第 i 栋房子的颜色。


返回 两栋 颜色 不同 房子之间的 最大 距离。


第 i 栋房子和第 j 栋房子之间的距离是 abs(i - j) ,其中 abs(x) 是 x 的绝对值。


示例 1:


image.png

image.png

输入:colors = [1,1,1,6,1,1,1]
输出:3
解释:上图中,颜色 1 标识成蓝色,颜色 6 标识成红色。
两栋颜色不同且距离最远的房子是房子 0 和房子 3 。
房子 0 的颜色是颜色 1 ,房子 3 的颜色是颜色 6 。
两栋房子之间的距离是 abs(0 - 3) = 3 。
注意,房子 3 和房子 6 也可以产生最佳答案。

image.png

输入:colors = [1,8,3,8,3]
输出:4
解释:上图中,颜色 1 标识成蓝色,颜色 8 标识成黄色,颜色 3 标识成绿色。
两栋颜色不同且距离最远的房子是房子 0 和房子 4 。
房子 0 的颜色是颜色 1 ,房子 4 的颜色是颜色 3 。两栋房子之间的距离是 abs(0 - 4) = 4 。
示例 3:
输入:colors = [0,1]
输出:1
解释:两栋颜色不同且距离最远的房子是房子 0 和房子 1 。
房子 0 的颜色是颜色 0 ,房子 1 的颜色是颜色 1 。两栋房子之间的距离是 abs(0 - 1) = 1 。
提示:
n == colors.length
2 <= n <= 100
0 <= colors[i] <= 100
生成的测试数据满足 至少 存在 2 栋颜色不同的房子



2. 解题


  • 暴力枚举
class Solution {
public:
    int maxDistance(vector<int>& colors) {
        vector<int> pos(101, -1); // 记录每种颜色的最左边的位置
        int ans = 0;
        for(int i = 0; i < colors.size(); ++i)
        {
            if(pos[colors[i]] == -1)
                pos[colors[i]] = i;
            for(int j = 0; j <= 100; ++j)
            {
                if(j != colors[i] && pos[j] != -1)
                // 颜色不相同,且 存在
                    ans = max(ans, i-pos[j]);
            }
        }
        return ans;
    }
};

8 ms 8.9 MB C++

  • 优化做法,判断首尾是否一样,不一样直接返回答案
  • 否则,在中间找到一个不一样的颜色,返回到两个端点较大的距离
  • 时间复杂度 O(n)
class Solution {
public:
    int maxDistance(vector<int>& colors) {
        if(colors[0] != colors.back()) return colors.size()-1;
        int ans = 0, n = colors.size();
        for(int i = 1; i < n-1; ++i)
        {
            if(colors[i] != colors[0])
            {
                ans = max(ans, max(i, n-1-i));
            }
        }
        return ans;
    }
};

4 ms 8.8 MB C++

相关文章
|
7月前
|
算法
每日一题:LeetCode-75. 颜色分类
每日一题:LeetCode-75. 颜色分类
|
7月前
|
Go
golang力扣leetcode 75.颜色分类
golang力扣leetcode 75.颜色分类
48 0
|
7月前
|
存储 算法
LeetCode刷题---75. 颜色分类(双指针,循环不变量)
LeetCode刷题---75. 颜色分类(双指针,循环不变量)
|
4月前
|
算法 搜索推荐
LeetCode第75题颜色分类
文章介绍了LeetCode第75题"颜色分类"的解法,通过双指针技术对数组中的0、1和2进行排序,避免了传统的排序算法,提供了一种时间复杂度为O(n)的高效解决方案。
LeetCode第75题颜色分类
|
4月前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
58 3
|
4月前
|
Python
【Leetcode刷题Python】75. 颜色分类
在不使用sort函数的情况下对包含红色、白色和蓝色元素的数组进行排序的方法:插入排序法和单指针交换法,并提供了相应的Python实现代码。
17 0
|
6月前
|
数据采集 SQL 算法
LeetCode题目75:颜色分类【python】
LeetCode题目75:颜色分类【python】
|
7月前
|
算法
【力扣】75.颜色分类
【力扣】75.颜色分类
|
7月前
|
Java
|
7月前
leetcode-75:颜色分类
leetcode-75:颜色分类
60 0