在给出的7*24个连续的值 找出连续值之和小于等于给定的值得间距最大的范围

还不一定完全通过,可能还需要调试

在给出的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<intGetBestTimeWindow(int nconst vector<int&arr)

    {

        // TODO: 在此添加你的代码

        vector<intresult;

        int timeWid[3] = {000};

        long int preTimeWid[3] = {000};

        int sum = 0;

        int addInx = 0;

        

        for (int i = 0i < 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值