文章目录
2078. 两栋颜色不同且距离最远的房子
思路:根据题目,一定有两个颜色不同的房子在这个数组中,所以一定有一个房子和第一栋房子颜色不同,也一定有一个房子和最后一个房子颜色不同,所以这个最大距离一定在这两个距离中的一个。只需要找到里第一栋房子最远的距离和里最后一个房子最远的距离然后去他们的最大值就是最远的距离
class Solution {
public:
int maxDistance(vector<int>& colors) {
int max = 0;
int len = colors.size();
for(int i = 0;i<len;i++)
{
int flag = colors[0];
if(colors[i]!=flag)
{
max = max>i?max:i;
}
}
for(int i = len-1;i>=0;i--)
{
int flag = colors[len-1];
if(colors[i]!=flag)
{
max = max>(len-1-i)?max:(len-1-i);
}
}
return max;
}
};
561. 数组拆分
思路:排序然后每次取两个数的较小值加到sum上。
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
int sum = 0;
for(int i = 0;i<nums.size();i+=2)
{
sum+=nums[i];
}
return sum;
}
};
1323. 6 和 9 组成的最大数字
思路:先将每一位数字取出来,然后找到最高位的6改成9,最后在合成一个数字即可。
class Solution {
public:
int maximum69Number (int num) {
vector<int> n;
while(num)
{
n.push_back(num%10);
num/=10;
}
for(int i = n.size()-1;i>=0;i--)
{
if(n[i]==6)
{
n[i] = 9;
break;
}
}
num = 0;
for(int i = n.size()-1;i>=0;i--)
{
num = num*10+n[i];
}
return num;
}
};
942. 增减字符串匹配
思路:如果是D那么就将范围内最大值放进ans数组,否则就将当前范围内的最小值放进数组。最后循环完每个字符,区间只剩下一个数字,放入数组即可。
class Solution {
public:
vector<int> diStringMatch(string s) {
vector<int> ans;
int n = s.size();
int max = n,min = 0;
int i = 0;
while(i<n)
{
if(s[i]=='D')
ans.push_back(max--);
else
ans.push_back(min++);
i++;
}
ans.push_back(max);
return ans;
}
};