给你一个二维整数数组 orders ,其中每个 orders[i] = [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。 订单类型 orderTypei 可以分为两种: • 0 表示这是一批采购订单 buy • 1 表示这是一批销售订单 sell 注意,orders[i] 表示一批共计 amounti 笔的独立订单,这些订单的价格和类型相同。对于所有有效的 i,由 orders[i] 表示的所有订单提交时间均早于 orders[i+1] 表示的所有订单。 存在由未执行订单组成的 积压订单 。积压订单最初是空的。提交订单时,会发生以下情况: • 如果该订单是一笔采购订单 buy ,则可以查看积压订单中价格 最低 的销售订单 sell 。如果该销售订单 sell 的价格 低于或等于 当前采购订单 buy 的价格,则匹配并执行这两笔订单,并将销售订单 sell 从积压订单中删除。否则,采购订单 buy 将会添加到积压订单中。 • 反之亦然,如果该订单是一笔销售订单 sell ,则可以查看积压订单中价格 最高 的采购订单 buy 。如果该采购订单 buy 的价格 高于或等于 当前销售订单 sell 的价格,则匹配并执行这两笔订单,并将采购订单 buy 从积压订单中删除。否则,销售订单 sell 将会添加到积压订单中。 输入所有订单后,返回积压订单中的 订单总数 。由于数字可能很大,所以需要返回对 109 + 7 取余的结果。
有 n 个朋友在举办一个派对,这些朋友从 0 到 n - 1 编号。派对里有 无数 张椅子,编号为 0 到 infinity 。当一个朋友到达派对时,他会占据 编号最小 且未被占据的椅子。 • 比方说,当一个朋友到达时,如果椅子 0 ,1 和 5 被占据了,那么他会占据 2 号椅子。 当一个朋友离开派对时,他的椅子会立刻变成未占据状态。如果同一时刻有另一个朋友到达,可以立即占据这张椅子。 给你一个下标从 0 开始的二维整数数组 times ,其中 times[i] = [arrivali, leavingi] 表示第 i 个朋友到达和离开的时刻,同时给你一个整数 targetFriend 。所有到达时间 互不相同 。 请你返回编号为 targetFriend 的朋友占据的 椅子编号 。
给你一个整数 mountainHeight 表示山的高度。 同时给你一个整数数组 workerTimes,表示工人们的工作时间(单位:秒)。 工人们需要 同时 进行工作以 降低 山的高度。对于工人 i : • 山的高度降低 x,需要花费 workerTimes[i] + workerTimes[i] * 2 + ... + workerTimes[i] * x秒。例如: ◦ 山的高度降低 1,需要 workerTimes[i] 秒。 ◦ 山的高度降低 2,需要 workerTimes[i] + workerTimes[i] * 2 秒,依此类推。 返回一个整数,表示工人们使山的高度降低到 0 所需的 最少 秒数。
给你一个非负整数数组 nums 和一个整数 k 。每次操作,你可以选择 nums 中 任一 元素并将它 增加 1 。 请你返回 至多 k 次操作后,能得到的 nums的 最大乘积 。由于答案可能很大,请你将答案对 109 + 7 取余后返回。
给你一个正整数数组 nums 。每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。(注意,在后续操作中你可以对减半过的数继续执行操作) 请你返回将 nums 数组和 至少 减少一半的 最少 操作数。
请你设计一个管理 n 个座位预约的系统,座位编号从 1 到 n 。 请你实现 SeatManager 类: • SeatManager(int n) 初始化一个 SeatManager 对象,它管理从 1 到 n 编号的 n 个座位。所有座位初始都是可预约的。 • int reserve() 返回可以预约座位的 最小编号 ,此座位变为不可预约。 • void unreserve(int seatNumber) 将给定编号 seatNumber 对应的座位变成可以预约。
有一个无限大的二维平面。 给你一个正整数 k ,同时给你一个二维数组 queries ,包含一系列查询: • queries[i] = [x, y] :在平面上坐标 (x, y) 处建一个障碍物,数据保证之前的查询 不会 在这个坐标处建立任何障碍物。 每次查询后,你需要找到离原点第 k 近 障碍物到原点的 距离 。 请你返回一个整数数组 results ,其中 results[i] 表示建立第 i 个障碍物以后,离原地第 k 近障碍物距离原点的距离。如果少于 k 个障碍物,results[i] == -1 。 注意,一开始 没有 任何障碍物。 坐标在 (x, y) 处的点距离原点的距离定义为 |x| + |y| 。
设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。 请实现 KthLargest 类: • KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。 • int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。
给你一个整数数组 piles ,数组 下标从 0 开始 ,其中 piles[i] 表示第 i 堆石子中的石子数量。另给你一个整数 k ,请你执行下述操作 恰好 k 次: • 选出任一石子堆 piles[i] ,并从中 移除 ceil(piles[i] / 2) 颗石子。 注意:你可以对 同一堆 石子多次执行此操作。 返回执行 k 次操作后,剩下石子的 最小 总数。 ceil(x) 为 大于 或 等于 x 的 最小 整数。(即,对 x 向上取整)。
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 你可以对 nums 执行一些操作,在一次操作中,你可以: • 选择 nums 中 最小 的两个整数 x 和 y 。 • 将 x 和 y 从 nums 中删除。 • 将 min(x, y) * 2 + max(x, y) 添加到数组中的任意位置。 注意,只有当 nums 至少 包含两个元素时,你才可以执行以上操作。 你需要使数组中的所有元素都 大于或等于 k ,请你返回需要的 最少 操作次数。
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你的 起始分数 为 0 。 在一步 操作 中: 1. 选出一个满足 0 <= i < nums.length 的下标 i , 2. 将你的 分数 增加 nums[i] ,并且 3. 将 nums[i] 替换为 ceil(nums[i] / 3) 。 返回在 恰好 执行 k 次操作后,你可能获得的最大分数。 向上取整函数 ceil(val) 的结果是大于或等于 val 的最小整数。
现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, ...] 。 实现 SmallestInfiniteSet 类: • SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。 • int popSmallest() 移除 并返回该无限集中的最小整数。 • void addBack(int num) 如果正整数 num 不 存在于无限集中,则将一个 num 添加 到该无限集中。