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 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥5 小时前
匿名函数 lambda + 高阶函数
java·python·算法
我叫袁小陌5 小时前
算法解题思路指南
算法
MC皮蛋侠客5 小时前
C++17 多线程系列(五):C++17 并行算法——从串行到并行的零成本迁移
c++·多线程
地平线开发者5 小时前
Conv+BN+Add+ReLU 融合机制简介
算法·自动驾驶
也曾看到过繁星5 小时前
数据结构---顺序表
数据结构
yuanyuan2o25 小时前
模型预训练:Hugging Face Transformers 基础
算法·ai·语言模型·自然语言处理·nlp·深度优先
杨充5 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
妄想出头的工业炼药师6 小时前
GS slam mono
算法·开源