字节9.12笔试(后端)复盘-第四题

数组游戏
图片说明
图片说明
方法:贪心+队列

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
// 4 -4 1 -3 1 -3

int f(vector<int>&nums) {
    int sum = 0;
    int ans = 0;
    queue<int> que;
    for (int z : nums) {
        if (sum + z >= 0) {
            ans++;
            sum += z;
            if (z < 0) que.push(z);
        }
        else {
            if (!que.empty() && z > que.front()){
                sum -= que.front();
                sum += z;
                que.pop();
                que.push(z);
            }
        }
    }
    return ans;
}

int main()
{
    int t;
    cin >> t;
    vector<int> vec;
    vector<vector<int>> vvint;
    while (t--)
    {
        int n;
        cin >> n;
        while (n--)
        {
            int k;
            cin >> k;
            vec.push_back(k);
        }
        vvint.push_back(vec);

        vec.clear();
    }

    for (int i = 0; i < vvint.size(); i++) {
        cout << f(vvint[i]) << endl;
    }
    return 0;
}

运行结果
图片说明

全部评论
麻烦问下这个方法ac了吗?
点赞 回复 分享
发布于 2021-09-12 14:45
太强了,来学习下
点赞 回复 分享
发布于 2021-09-12 15:07
这个可以用动态规划嘛
点赞 回复 分享
发布于 2021-09-13 18:44
感觉需要用优先队列吧。。
点赞 回复 分享
发布于 2021-09-21 15:32

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
3 2 评论
分享
牛客网
牛客企业服务