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);
    }
};
相关推荐
「QT(C++)开发工程师」3 小时前
C++ 11 常用for循环
开发语言·c++
我还记得那天3 小时前
0 初识C++
开发语言·c++
Asize5 小时前
146. LRU 缓存
算法
Asize5 小时前
543. 二叉树的直径
算法
lemon_sjdk5 小时前
ObjectProperty
java·开发语言·算法
Zentceh5 小时前
AI-ISP在夜视机芯中的应用:从传统ISP到PixelClean全彩夜视的进化
人工智能·科技·算法·计算机视觉·车载系统·视频·智能硬件
「QT(C++)开发工程师」5 小时前
C++ std::move 详解
开发语言·c++
xier_ran5 小时前
【infra之路】AWQ 详解:激活感知权重保护,让 W4A16 量化精度超越 GPTQ
线性代数·算法·机器学习·量化·infra
亦皓ai6 小时前
AI时代后端工程(二):AI把代码写得越来越快,我却越来越不敢让它直接开工了
人工智能·算法·机器学习·搜索引擎·transformer