题目来源于知识星球—英雄算法联盟,六月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、1221.分割平衡字符串(简单)
1.题目描述
2.解题思路
遍历字符串数组,如果数组中的元素为R,r++,如果元素为L,l++,
如果r等于l,那么计数器++。最后返回计数器的数值。
3.代码演示(C++)
class Solution
{
public:
int balancedStringSplit(string s)
{
int r=0;
int l=0;
int cnt=0;
for(int i=0;i<s.length();i++)
{
if(s[i]=='R')
{
r++;
}
else
{
l++;
}
if(r==l)
{
cnt++;
}
}
return cnt;
}
};
4.题目链接
二、1217.玩筹码(简单)
1.题目描述
2.解题思路
这道题的实质为判断数组中元素的奇偶性,用两个计数器分别记录奇数
和偶数元素的个数,最后返回较小的值即为本题的解。
3.代码演示(C++)
class Solution
{//实质为判断数字的奇偶性
public:
int minCostToMoveChips(vector<int>& position)
{
int a=0;
int b=0;
for(int i=0;i<position.size();i++)
{
if(position[i]%2==0)
{
a++;
}
else
{
b++;
}
}
return min(a,b);
}
};
4.题目链接
三、1029.两地调度(中等)
1.题目描述
2.解题思路
考虑所有人都派往B,然后逐渐选出n个人派往A。选出一个人去A地,
就是A价格-B价格,选取这个值最小的人去A。因此要对所有人的A价
格-B价格进行升序排列,前n个人前往A地,后面的人前往B地。
3.代码演示(C++)
class Solution
{
public:
int twoCitySchedCost(vector<vector<int>>& costs)
{
sort(begin(costs), end(costs),
[](const vector<int> &o1, const vector<int> &o2)
{
return (o1[0] - o1[1] < o2[0] - o2[1]);
});
int total = 0;
int n = costs.size() / 2;
for (int i = 0; i < n; ++i) total += costs[i][0] + costs[i + n][1];
return total;
}
};
4.题目链接
四、面试题10.11.峰与谷(中等)
1.题目描述
2.解题思路
对数组下标进行判断,从1开始,数组下标 i 如果是偶数,那么如果第i个数
小于它前面一个数,两个数交换位置。i如果是奇数,当第i个数大于它前面
的一个数时,两个数交换位置。
3.代码演示(C++)
class Solution
{
public:
void wiggleSort(vector<int>& nums)
{
for(int i=1;i<nums.size();i++)
{
if(i%2==0)
{
if(nums[i]<nums[i-1])
{
swap(nums[i],nums[i-1]);
}
}
else
{
if(nums[i]>nums[i-1])
{
swap(nums[i],nums[i-1]);
}
}
}
}
};
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!