一、题目描述

二、解题思路
(1)解法一
可以使用枚举的方法来解决这个问题,每次固定左边的位置,从右边开始枚举,直到到达数组尾部,枚举完所有的情况;
(2)解法二
通过观察我们可以知道,满足题意的位置一定与最左边的位置和最右边的位置有关(贪心):
<1>固定最左边的位置left1,right1从右往左遍历,第一个colors[left1]!=colors[right1],计算ret1=right1-left1;
<2>固定最右边的位置right2,left2从左往右遍历,第一个colors[left2]!=colors[right2],计算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);
}
};
