leetcode2078 两栋颜色不同且距离最远的房子

一、题目描述

二、解题思路

(1)解法一

可以使用枚举的方法来解决这个问题,每次固定左边的位置,从右边开始枚举,直到到达数组尾部,枚举完所有的情况;

(2)解法二

通过观察我们可以知道,满足题意的位置一定与最左边的位置和最右边的位置有关(贪心):

<1>固定最左边的位置left1,right1从右往左遍历,第一个colorsleft1!=colorsright1,计算ret1=right1-left1;

<2>固定最右边的位置right2,left2从左往右遍历,第一个colorsleft2!=colorsright2,计算ret2=right2-left2;

<3>返回值ret=max(ret1,ret2);

三、代码实现

(1)解法一

cpp 复制代码
class Solution {
public:
    int maxDistance(vector<int>& colors) {
       //枚举
       int n=colors.size();
       int ret=0;
       for(int left=0;left!=n-1;left++)
            for(int right=n-1;right>left;right--){
                if(colors[left]!=colors[right])
                    ret=max(ret,right-left);
            }
        return ret;
    }
};

(2)解法二

cpp 复制代码
class Solution {
public:
    int maxDistance(vector<int>& colors) {
       //贪心
       //固定最左边
       int ret1=0;
       int left=0,right=colors.size()-1;
       while(colors[left]==colors[right]&&left<=right) right--;
       ret1=right-left;
       //固定最右边
       int ret2=0;
       left=0,right=colors.size()-1;
       while(colors[left]==colors[right]&&left<=right) left++;
       ret2=right-left;
       
       return max(ret1,ret2);
    }
};
相关推荐
qz5zwangzihan18 分钟前
题解:Atcoder Beginner Contest abc466 F - Many Mod Calculation
c++·题解·优先队列·atcoder·大根堆·abc466·abc466f
mm99542032 分钟前
PMI三大证书:PMP、PgMP、PfMP证书对比
学习·职场和发展·项目管理·学习方法·pmp
froyoisle34 分钟前
CSP 真题解析:[CSP-J 2019-T4] 加工零件
c++·算法·bfs·csp-j·算法竞赛·信息学·信奥赛
LuminousCPP35 分钟前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
2401_8697695935 分钟前
内容7 内存管理 1
c++
兰令水37 分钟前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
Tisfy44 分钟前
LeetCode 1291.顺次数:打表/枚举
算法·leetcode·题解·枚举·遍历
ysa0510301 小时前
【板子】拓扑排序
c++·算法·图论·板子
某不知名網友2 小时前
项目:轻量级搜索引擎
c++
算法备案代理2 小时前
宽带自动连接保姆级教程
算法