Problem Description
Given an array of size n that has the following specifications:
Each element in the array contains either a monkey or a banana.
Each monkey can eat only one banana.
A monkey cannot eat a banana which is more than K units away from the monkey.
We need to find the maximum number of bananas that can be eaten by monkeys.
Input
Two lines.
The first line contains an array of size n contain chars ‘B’ (represent Banana) or ‘M’ (represent Monkey). n >= 0.
The second line contains a integer K, K >= 0.
Output
An integer, the maximum number of bananas can be eaten by monkeys.
Sample Input
MBBMB
1
Sample Output
2
原题地址:
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
class Solution {
public:
int maxBananas(int k, vector<char>& arr){
if (k == 0) // 若猴子可以吃到香蕉的范围为0,则直接返回0个即可
return 0;
n = arr.size();
for(int i = 0;i < n;i++){
if(arr[i] == 'M'){
// 观察该猴子以k为半径从左数第k个到右数第k个,是否有香蕉,有则计数,并抹去对于索引的香蕉
for(int j = -k;j <= k;j++)
if((i + j >= 0) && (arr[i + j] == 'B')){
arr[i+j] = '0';
maxCnt ++;
break; // 只要吃到,就跳出循环,因为每个猴子最多只能吃一个香蕉
}
}
}
return maxCnt;
}
private:
int n, maxCnt = 0; // n数组长度,maxCnt所有猴子吃到最多的香蕉个数
};
int main(){
int k;
char element;
vector<char> arr;
while (cin.peek()!='\n'){
cin >> element;
arr.push_back(element);
}
cin >> k;
Solution sol;
cout<<sol.maxBananas(k, arr)<<endl;
return 0;
}

本文详细解析了一道经典的算法题目——猴子吃香蕉问题。题目要求在给定的数组中,猴子只能吃距离它不超过K单位的香蕉,目标是找出最多能有多少香蕉被吃掉。文章提供了完整的代码实现,包括输入输出的格式,以及解决此问题的算法思路。
8万+

被折叠的 条评论
为什么被折叠?



