首页 > 编程语言 >C++ priority_queue使用方法

C++ priority_queue使用方法

时间:2023-01-02 13:23:19浏览次数:50  
标签:sell queue buy int top od C++ priority second

以leetcode 1081题为例,https://leetcode.cn/problems/number-of-orders-in-the-backlog/

class Solution {
public:
    int getNumberOfBacklogOrders(vector<vector<int>>& orders) {
        // 新增sell订单,找buy的大于sell的,找buy最大值
        // 新增buy订单,找sell的小于buy的,找sell最小值
        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> sell; // [price, amount]
        priority_queue<pair<int, int>, vector<pair<int, int>>, less<pair<int, int>>> buy; 
        for (auto od : orders) {
            if (od[2] == 0) { // buy
                while (!sell.empty() && od[1] > 0 && sell.top().first <= od[0]) {
                    if (od[1] >= sell.top().second) {
                        od[1] -= sell.top().second;
                        sell.pop();
                    } else {
                        int price = sell.top().first;
                        int amount = sell.top().second-od[1];
                        sell.pop();
                        sell.push({price, amount});
                        od[1] = 0;
                    }
                }
                if (od[1] != 0) {
                    buy.push({od[0], od[1]});
                }
                
            } else {  // sell
                while (!buy.empty() && od[1] > 0 && buy.top().first >= od[0]) {
                    if (od[1] >= buy.top().second) {
                        od[1] -= buy.top().second;
                        buy.pop();
                    } else {
                        int price = buy.top().first;
                        int amount = buy.top().second-od[1];
                        buy.pop();
                        buy.push({price, amount});
                        od[1] = 0;
                    }
                }
                if (od[1] != 0) {
                    sell.push({od[0], od[1]});
                }
            }
        }
        int MOD = 1000000007;
        int total = 0;
        while (!buy.empty()) {
            total = (total + buy.top().second) % MOD;
            buy.pop();
        }
        while (!sell.empty()) {
            total = (total + sell.top().second) % MOD;
            sell.pop();
        }
        return total;
    }
};

 

标签:sell,queue,buy,int,top,od,C++,priority,second
From: https://www.cnblogs.com/roadwide/p/17019771.html

相关文章

  • C/C++高级语言程序设计课程设计任务书[2022-01-02]
    C/C++高级语言程序设计课程设计任务书[2022-01-02]高级语言程序设计课程设计任务书课程设计名称 中文:高级语言程序设计课程设计英文:ComputerProgrammingBasicCompreh......
  • C/C++课程设计题目[2023-01-02]
    C/C++课程设计题目[2023-01-02]选题1:考勤信息管理系统某公司对员工的出勤采用计算机管理,为该公司设计一个员工考勤信息管理程序。系统包括三类用户:管理员,考勤员,普通职员......
  • C/C++通讯录管理程序[2023-01-02]
    C/C++通讯录管理程序[2023-01-02]问题描述:编写一个简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。基本要求:程序应提供的......
  • C++小型公司工资管理系统[2023-01-02]
    C++小型公司工资管理系统[2023-01-02]题目14“小型公司工资管理系统设计”1、问题描述某公司需要存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。其中,雇......
  • C/C++停车场管理系统[2023-01-02]
    C/C++停车场管理系统[2023-01-02]项目七:停车场管理系统1、教学内容提供停车场地的管理,分为月租车和临时停车两大类。场地分为月租车停放区域和临时车辆停放区域两大块......
  • C++ string 基本用法
    一、C++string的创建方式1、string的头文件#include<iostream>//等价于C语言中的#include<stdio.h>#include<cstring>#include<string.h>//以上两种都是C语言的string头......
  • [C/C++] C++之Lambda表达式
    Lambda表达式也叫匿名函数,有时候也叫闭包(Closure)参考视频:注意视频中捕获变量部分有错误,按本博客为准1.定义[OuterVar](intx,inty)->int{returnOuterVar+......
  • C++实现向上取整
    1.使用库函数doubleceil(doublex)由于传入的参数和返回的参数都是double,所以需要手动转化代码:#include<bits/stdc++.h>usingnamespacestd;intmain(){......
  • C/C++按值传递和按地址传递
    C/C++的按值传递和按地址传递有明显不同,下面对他们作个区别:按值传递:在调用函数中将原函数的值拷贝一份过去被调用的函数,在被调用函数中对该值的修改不会影响原函数的值。按......
  • C++ Stack
    C++Stack基本操作头文件#include<stack>常用成员函数push(x)//x压入栈顶top()//返回栈顶元素的引用pop()//弹出栈顶元素empty()//栈为空返回true......