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);
    }
};
相关推荐
王老师青少年编程5 分钟前
2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷(汇总)
c++·模拟卷·2026年·青少年信息素养大赛·算法应用主题赛·决赛
linux-hzh7 分钟前
百日算法修炼 · Day 05
java·算法
paopaokaka_luck7 分钟前
基于springboot3+vue3的云南本土影视文旅推荐平台(协同过滤算法、Echarts图形化分析)
前端·spring boot·学习·算法·echarts·mybatis
程序员-Benothing10 分钟前
MySQL 的存储引擎有哪些?它们之间有什么区别?
后端·mysql·面试·职场和发展
Ivanqhz39 分钟前
泰勒展开(Taylor Expansion)
算法·决策树·机器学习·集成学习
凉茶钱1 小时前
【数据结构】C语言实现队列
c语言·数据结构
zander2582 小时前
34. 在排序数组中查找元素的第一个和最后一个位置:用两个边界定位区间
数据结构·算法·leetcode
郑州光合科技余经理7 小时前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
To_OC9 小时前
LC 35 搜索插入位置:二分查找谁都会,边界条件谁写谁懵
javascript·算法·leetcode
天才测试猿10 小时前
2026软件测试面试八股文(含答案+文档)
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展