还不一定完全通过,可能还需要调试
在给出的7*24个连续的值 找出连续值之和小于给定的值得间距最大的范围:
如:(可以跨阶段)
要求小于等于6
7*24个数字 1 1 2 9 9 9 9 9 ........ 9 9 9 1 1
输出 范围的下标
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved.
* Description: 上机编程认证
* Note: 缺省代码仅供参考,可自行决定使用、修改或删除
*/
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
#define ARR_LEN (7 * 24)
// 待实现函数,在此函数中填入答题代码
class Solution
{
public:
vector<int> GetBestTimeWindow(int n, const vector<int> &arr)
{
// TODO: 在此添加你的代码
vector<int> result;
int timeWid[3] = {0, 0, 0};
long int preTimeWid[3] = {0, 0, 0};
int sum = 0;
int addInx = 0;
for (int i = 0; i < arr.size(); i++) {
if (preTimeWid[1] >= arr.size() - 1) {
addInx = (preTimeWid[1] - arr.size()) + 1;
} else {
addInx = preTimeWid[1] + 1;
}
if (i != 0) {
sum = (preTimeWid[2] - arr[i - 1]) + arr[addInx];
} else {
addInx = 0;
sum = arr[0];
}
int flag = 0;
while (sum <= n) {
if (addInx == 167) {
flag = 1;
addInx = -1;
}
sum += arr[addInx + 1];
addInx++;
}
preTimeWid[0] = i;
if (i == addInx) {
preTimeWid[1] = i;
preTimeWid[2] = sum;
} else {
preTimeWid[1] = (preTimeWid[1] >= arr.size() | flag) ? addInx + arr.size() - 1 : (addInx - 1);
preTimeWid[2] = sum - arr[addInx];
}
if (preTimeWid[1] - preTimeWid[0] > timeWid[2]) {
timeWid[0] = (int)preTimeWid[0];
timeWid[1] = (int) ((preTimeWid[1] > 167) ? (preTimeWid[1] - 168) : preTimeWid[1]);
timeWid[2] = (int)(preTimeWid[1] - preTimeWid[0]);
}
}
result.push_back(timeWid[0]);
result.push_back(timeWid[1]);
return result;
}
};
// 以下为考题输入输出框架,此部分代码不建议改动
inline int ReadInt()
{
int number;
std::cin >> number;
return number;
}
template<typename T>
inline std::vector<T> ReadVector(int size)
{
std::vector<T> objects(size);
for (int i = 0; i < size; ++i) {
std::cin >> objects[i];
}
return objects;
}
template<typename T>
inline void WriteVector(const std::vector<T>& objects, char delimeter = ' ')
{
auto it = objects.begin();
if (it == objects.end()) {
return;
}
std::cout << *it;
for (++it; it != objects.end(); ++it) {
std::cout << delimeter << *it;
}
}
int main()
{
int n = ReadInt();
vector<int> arr = ReadVector<int>(ARR_LEN);
Solution solu;
vector<int> res = solu.GetBestTimeWindow(n, arr);
WriteVector(res);
return 0;