当前位置: 首页 > news >正文

LeetCode每日一题,8-6

水果成篮3️⃣
本题给你两个数组fruits和baskets,对于fruits种的每个数,找到baskets中第一个大于等于fruits的值,然后baskets的该下标作废,最后返回有多少个fruit找不到对应的baskets。
用线段树维护区间最大值,然后对于每个fruits进行查询,重点是查询最左边的值。

class Solution {int N = (int) (1e5 + 10);Node[] tr = new Node[4 * N];class Node {int l, r;int val;}void build(int u, int l, int r,  int[] baskets) {tr[u] = new Node();tr[u].l = l;tr[u].r = r;tr[u].val = 0;if (l == r) {tr[u].val = baskets[l - 1];return;}int mid = l + r >> 1;build(u << 1, l, mid, baskets);build(u << 1 | 1, mid + 1, r, baskets);tr[u].val = Math.max(tr[u << 1].val, tr[u << 1 | 1].val);}int query(int u, int l, int r, int val) {// 如果当前节点的值小于要查询的值,直接返回0if (tr[u].val < val) {return 0;}// 如果当前节点区间完全在查询区间外,返回0if (tr[u].r < l || tr[u].l > r) {return 0;}// 如果是叶子节点且值满足条件if (tr[u].l == tr[u].r) {int pos = tr[u].l;tr[u].val = -1;  // 标记为已使用return pos;}int res = 0;int mid = (tr[u].l + tr[u].r) >> 1;// 先尝试左子树if (tr[u << 1].val >= val && l <= mid) {res = query(u << 1, l, Math.min(r, mid), val);}// 如果左子树没找到结果且右子树可能有解,尝试右子树if (res == 0 && tr[u << 1 | 1].val >= val && r > mid) {res = query(u << 1 | 1, Math.max(l, mid + 1), r, val);}// 更新当前节点的值tr[u].val = Math.max(tr[u << 1].val, tr[u << 1 | 1].val);return res;}public int numOfUnplacedFruits(int[] fruits, int[] baskets) {int n = fruits.length;int m = baskets.length;int res = n;build(1, 1, m, baskets);for (int i = 0; i < n; i++) {int val = fruits[i];
//            找到第一个大于等于val的位置int pos = query(1, 1, m, val);if(pos != 0)res --;}return res;}
}
http://www.dtcms.com/a/318556.html

相关文章:

  • 基于Simulink/MWORKS的文字与开关量混合传输系统设计
  • 流式输出 vs 非流式输出
  • SpringBoot设置跨域的几种方式
  • 互斥锁与条件变量
  • 每日五个pyecharts可视化图表-bars(5)
  • Java语言基础深度面试题
  • List、ArrayList 与顺序表
  • 智能学号抽取系统 V5.7.4 更新报告:修复关键同步漏洞,体验更臻完美
  • Spring Boot 项目代码笔记
  • 三、Istio流量治理(二)
  • 文件权限合规扫描针对香港服务器安全基线的实施流程
  • 《零基础入门AI:深度学习入门(从PyTorch安装到自动微分)》
  • Anthropic于本周一推出了其旗舰模型的升级版Claude Opus 4.1
  • 《第十三篇》深入解析 `kb_api.py`:知识库的创建、删除与查询接口
  • 基于Vue 3 的智能支付二维码弹窗组件设计与实现
  • Effective C++ 条款26: 尽可能延后变量定义式的出现时间
  • 007 前端( JavaScript HTML DOM+Echarts)
  • 【保留小数精度不舍入】2022-10-8
  • MaxKB 使用 MCP 连接 Oracle (免安装 cx_Oracle 和 Oracle Instant Client)
  • 智慧水务管理系统
  • C++、STL面试题总结(二)
  • 三、Envoy的管理接口
  • 数据科学与计算pandas
  • 沉寂半年,Kimi归来!
  • 地铁和城市宏基因组项目metaSUB
  • 脂质体转染、物理转染(电穿孔)与病毒转染:原理及操作步骤详解
  • nlp-词汇分析
  • 【Dify学习笔记】:Dify搭建表单信息提交系统
  • windows系统创建ubuntu系统
  • C++线程中 detach() 和 join() 的区别