目标:求出表现良好时间的最大长度
第一步:将不劳累的日子和劳累的日子区分。遍历将输入数组的值化为1和-1,1为劳累的日子,-1为不劳累的日子
第二步:以数组的每个日子开始,遍历整个数组,记录数组中的表现良好长度的最大长度,是否为合适段用res判断,若res>1则仍然符合要求
第三步,以数组去记录每个日子开始的最长时间段,例如第一天就记录在【1】
第四步:遍历记录数组的最大数,输出最大长度
代码如下:
# include <stdio.h>
# include <vector>
# include <unordered_map>
# include <algorithm>
# include <iostream>
using namespace std;
class Solution {
public:
int longestWPI(vector<int>& hours) {
int answer = 0;
int i = 0;
for (i = 0; i < hours.size(); i++)
{
if (hours[i] > 8)
{
hours[i] = 1;
}
else {
hours[i] = -1;
}
}
//完成数组1和-1的初始化
int a[99]={0};
//储存每次的最长时间段
int res = 0;
int i1 = 0;
int i2 = 0;
for (i1 = 0; i1 < hours.size(); i1++)
{
for (i2 = 0; i2 < hours.size(); i2++)
{
res += hours[i2];
if (res > 0)
{
a[i1] = i2+1;
}
}
}
//完成储存
int i3 = 0;
for (i3 = 0; i3 < hours.size(); i3++)
{
if (a[i3] > answer) {
answer = a[i3];
}
}
//挑选储存中的最大值
return answer;
}
};
int main() {
vector<int> hours = { 9,6,6,6 };
Solution* solution = new Solution();
printf("%d\n", solution->longestWPI(hours));
return 0;
}
测试: