【教3妹学编程-算法题】最大和查询

还是单身狗

3妹:2哥,你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定”
2哥 : 啥?18岁就当爹啦?
3妹:确切的说是14岁好吧。
2哥 : 哎,想我30了, 还是个单身狗。
3妹:别急啊, 2嫂肯定在某个地方等着你去娶她呢。又不是结婚越早越好。
2哥:是啊, 这孩子14岁当爹,也太早了。
3妹:2哥,你找女朋友有什么条件没有哇?
2哥 : emmm, 以前希望找一个温柔漂亮的, 现在嘛, 女的、活的。毕竟年龄已经很大了, 已经30了…
3妹:才30而已嘛, 女生很多都喜欢找个比自己大一点的~
2哥 : 哎,你们女生最大能接受比自己大多少岁啊?
3妹:emmm, 这么不好说,要看具体女生,一般大个3-5岁都可以吧。 2哥说到最大, 我今天看到一个最大和查询的题目,让我也来考考你吧~

考考你

题目:

给你两个长度为 n 、下标从 0 开始的整数数组 nums1 和 nums2 ,另给你一个下标从 1 开始的二维数组 queries ,其中 queries[i] = [xi, yi] 。

对于第 i 个查询,在所有满足 nums1[j] >= xi 且 nums2[j] >= yi 的下标 j (0 <= j < n) 中,找出 nums1[j] + nums2[j] 的 最大值 ,如果不存在满足条件的 j 则返回 -1 。

返回数组 answer ,其中 answer[i] 是第 i 个查询的答案。

示例 1:

输入:nums1 = [4,3,1,2], nums2 = [2,4,9,5], queries = [[4,1],[1,3],[2,5]]
输出:[6,10,7]
解释:
对于第 1 个查询:xi = 4 且 yi = 1 ,可以选择下标 j = 0 ,此时 nums1[j] >= 4 且 nums2[j] >= 1 。nums1[j] + nums2[j] 等于 6 ,可以证明 6 是可以获得的最大值。
对于第 2 个查询:xi = 1 且 yi = 3 ,可以选择下标 j = 2 ,此时 nums1[j] >= 1 且 nums2[j] >= 3 。nums1[j] + nums2[j] 等于 10 ,可以证明 10 是可以获得的最大值。
对于第 3 个查询:xi = 2 且 yi = 5 ,可以选择下标 j = 3 ,此时 nums1[j] >= 2 且 nums2[j] >= 5 。nums1[j] + nums2[j] 等于 7 ,可以证明 7 是可以获得的最大值。
因此,我们返回 [6,10,7] 。
示例 2:

输入:nums1 = [3,2,5], nums2 = [2,3,4], queries = [[4,4],[3,2],[1,1]]
输出:[9,9,9]
解释:对于这个示例,我们可以选择下标 j = 2 ,该下标可以满足每个查询的限制。
示例 3:

输入:nums1 = [2,1], nums2 = [2,3], queries = [[3,3]]
输出:[-1]
解释:示例中的查询 xi = 3 且 yi = 3 。对于每个下标 j ,都只满足 nums1[j] < xi 或者 nums2[j] < yi 。因此,不存在答案。

提示:

nums1.length == nums2.length
n == nums1.length
1 <= n <= 10^5
1 <= nums1[i], nums2[i] <= 10^9
1 <= queries.length <= 10^5
queries[i].length == 2
xi == queries[i][1]
yi == queries[i][2]
1 <= xi, yi <= 10^9

思路:

思考

先按nums1升序,然后一个个检查nums2,如果后面出现nums2比前面大,那说明前面那个数没有用了(两者都比你大,那么和也比你更大) 剔除掉无用数后,我们可以发现第一维是升序,第二维是降序。 对于每一个询问queries,我们可以用二分法找到第一个比x大的下标left(left之后的都比它大) 同理,可以找到比y大的下标right(right之前的都比它大) 接下来我们需要返回的答案就是left和right之间所有下标里和最大的值(线段树维护区间最大值)

java代码:

class Solution {
    public int[] maximumSumQueries(int[] nums1, int[] nums2, int[][] queries) {
        int n = nums1.length;
        int m = queries.length;
        Point[] ps = new Point[m + n];
        for (int i = 0; i < n; i++) {
            ps[i] = new Point(nums1[i], nums2[i], i, 0);
        }
        for (int i = 0; i < m; i++) {
            ps[i + n] = new Point(queries[i][0], queries[i][1], i, 1);
        }
        // p.q=0/1是为了让p.x相同时,nums的数排在前面,从而先update再query
        Arrays.sort(ps, (p1, p2) -> p1.x == p2.x ? (p1.q - p2.q) : (p2.x - p1.x));
        int end = (int)1e9;
        Node root = new Node(0, end, -1);
        int[] ans = new int[m];
        for (Point p : ps) {
            if (p.q == 0) {
                root.update(p.y, p.y, p.x + p.y);   // 单点更新
            } else {
                ans[p.idx] = root.query(p.y, end);  // 区间查询[p.y, end]
            }
        }

        return ans;
    }

    class Point {
        int x;
        int y;
        int idx;
        int q;

        public Point(int x, int y, int idx, int q) {
            this.x = x;
            this.y = y;
            this.idx = idx;
            this.q = q;
        }
    }

    class Node {
        int left;
        int right;
        int val;
        Node leftNode;
        Node rightNode;

        public Node(int l, int r, int v) {
            left = l;
            right = r;
            val = v;
        }

        public Node getLeftNode() {
            if (leftNode == null) {
                leftNode = new Node(left, left + (right - left) / 2, val);
            }
            return leftNode;
        }

        public Node getRightNode() {
            if (rightNode == null) {
                rightNode = new Node(left + (right - left) / 2 + 1, right, val);
            }
            return rightNode;
        }

        public void update(int lo, int hi, int v) {
            if (left > hi || right < lo) {
                return;
            }
            if (left >= lo && right <= hi) {
                val = Math.max(val, v);
                return;
            }
            getLeftNode().update(lo, hi, v);
            getRightNode().update(lo, hi, v);
            val = Math.max(val, leftNode.val);
            val = Math.max(val, rightNode.val);
        }

        public int query(int lo, int hi) {
            if (left > hi || right < lo || val == -1) {
                return -1;
            }
            if (left >= lo && right <= hi) {
                return val;
            }
            return Math.max(getLeftNode().query(lo, hi), getRightNode().query(lo, hi));
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/156310.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧校园电子班牌 智能互联家校互通源码 springboot

利用先进的云计算技术&#xff0c;将教育信息化资源和教学管理系统进行有效整合&#xff0c;实现生态基础数据共享、应用生态统一管理&#xff0c;为智慧教育建设的统一性&#xff0c;稳定性&#xff0c;可扩展性&#xff0c;互通性提供保障的智慧教育一体化云解决方案。 在大数…

内网穿透(frp和proxychains4)

一、准备工作 需要三台机器&#xff0c;去哦这里准备的是win7&#xff08;目标主机&#xff09;&#xff0c;kali&#xff08;攻击者&#xff09;&#xff0c;红帽&#xff08;跳板&#xff09; 攻击机&#xff08;kali&#xff09;&#xff1a;192.168.10.15 跳板机&#xff0…

护眼台灯选购注意事项?考公专用护眼台灯推荐

随着科技的发展和进步&#xff0c;台灯的外观也不在和以往一般笨重&#xff0c;而是变得越来越美观&#xff0c;而且也更方便了&#xff0c;功能也越来越多元化了。台灯作为现在我们日常学习、阅读、办公必备的一盏照明灯具&#xff0c;其光源的舒适度是非常重要的。那么挑选台…

word文档转换为ppt文件,怎么做?

大家是否会遇到需要将word文档转换为ppt文件的情况&#xff1f;除了反反复复粘贴复制以外&#xff0c;还有其他方法可以转换文件格式&#xff0c;今天给大家分享word转换ppt方法。 首先我们先将word文件打开大纲模式 然后我们将文中的大标题设置为1级标题&#xff0c;副标题设…

idea 环境搭建及运行java后端源码

1、 idea 历史版本下载及安装 建议下载和我一样的版本&#xff0c;2020.3 https://www.jetbrains.com/idea/download/other.html&#xff0c;idea分为专业版本&#xff08;Ultimate&#xff09;和社区版本&#xff08;Community&#xff09;&#xff0c;前期可以下载专业版本…

Modbus转Profinet网关在大型挤压涂布机应用配置案例

变频器和伺服电机是常用于工业生产线的电力传动设备。它们的功能是根据不同的控制信号调整电机的运行状态&#xff0c;实现对生产线速度和精度的精确控制。通过PLC与兴达易控Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;的连接&#xff0c;变频器和伺服电机可以与P…

Windows环境VSCode配置OpenCV-环境搭建(一)

软件准备 OpenCV cmake MinGW-W64 MinGW-W64要下载 否则后面编译出错&#xff1a; D:/openCV_win/opencv/sources/modules/core/include/opencv2/core/utility.hpp:719:29: error: Mutex is not a member of cvtypedef std::lock_guard<cv::Mutex> AutoLock;^~~~~D:/…

vue 城市选择器的使用 element-china-area-data

一、Element UI 中国省市区级联数据 本文参考&#xff1a;element-china-area-data - npm 1. 安装 npm install element-china-area-data -S2. 使用 import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from e…

jetson nano的tensorrt加速部署

实验平台参数 jetack在线OTA升级指令 $ sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list修改其apt源文件即可,即可可以参考上一篇文章 一,查看相应的包版本 1,jetpack版本查看 🔔sudo apt-cache show nvidia-jetpack 后面我进行了OTA在线升级,升级到4.…

智能电网故障模拟柜的应用背景

随着科技的不断发展&#xff0c;智能电网已经成为了现代电力系统的重要组成部分&#xff0c;智能电网通过集成先进的信息技术、通信技术和自动化技术&#xff0c;实现了电力系统的优化调度、高效运行和可靠供电。智能电网在提高电力系统性能的同时&#xff0c;也面临着更多的挑…

Airtest:各平台的剪切板功能汇总

1. 前言 一直以来&#xff0c;大家都还挺关注 Airtest是否有剪切板功能 的。从Airtest1.3.1版本起&#xff0c;我们新增了Android、iOS设备的剪切板功能&#xff0c;自此&#xff0c;3大平台的剪切板功能就齐全啦。 正好趁这个机会&#xff0c;我们给各大平台的剪切板功能做个…

HTTP Error 500.31 - Failed to load ASP.NET Core runtime

在winserver服务器上部署net6应用后&#xff0c;访问接口得到以下提示&#xff1a; 原因是因为没有安装net6的运行时和环境&#xff0c;我们可以在windows自带的 “事件查看器” 查看原因。 可以直接根据给出的地址去官网下载sdk环境&#xff0c;安装即可 下载对应的net版本…

OmniGraffle Pro v7.22.3(流程图UML图)

OmniGraffle Pro是一款非常棒的绘图软件&#xff0c;具有多种功能&#xff0c;包括&#xff1a; 绘制图表&#xff1a;OmniGraffle Pro可以创建各种类型的图表&#xff0c;包括流程图、组织图、UML图、网络图等等。它还支持导入和导出多种文件格式&#xff0c;如PDF、SVG、Vis…

小程序商城免费搭建之java商城 电子商务Spring Cloud+Spring Boot+二次开发+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

阿桂天山的小工具:我将16个Excel文件中31万多条数据拆分成318个文件

1.话不多说,先上图看效果 2.技术说明及实用源码 2.1)pythonflaskpandas , 由于我的开发环境版本问题,为了能读xls,xlsx,但又不想升级,只能通过xlrd 1.2.0读取xls,xlsx文件再转换成dict字典格式,再通过 data pd.DataFrame(dict_data)实现类型转换 2.2)实用代码,保证不丢任何一行…

一个美观且功能丰富的 .NET 控制台应用程序开源库

推荐一个美观且功能丰富的 .NET 控制台应用程序开源库&#xff0c;从此告别黑漆漆的界面。 01 项目简介 Spectre.Console 是一个开源的 .NET 库&#xff0c;用于创建美观、功能丰富的控制台&#xff08;命令行&#xff09;应用程序。它提供了一组易于使用的 API&#xff0c;…

“具有分布式能源资源的多个智能家庭的能源管理的联邦强化学习”文章学习三——基于联邦深度学习的多智能家居能源管理

一、系统描述 我们考虑一个基于FRL的HEMS&#xff0c;它由单个GS和N个LHEMS组成&#xff0c;如图2所示。如图2-C所示&#xff0c;FRL训练过程包括两个步骤&#xff1a;步骤1&#xff09;使用本地数据对LHEMS&#xff08;即本地神经网络的权重ωn&#xff09;进行本地模型的训练…

全网首位数字军人“穆兰”惊艳亮相,与拓世法宝共同绘就未来社会图景

古有穆桂英、花木兰挂帅出征&#xff0c;今有全网首位虚拟数字军人“穆兰”展巾帼风采。今年国庆节后&#xff0c;中国军号在全网为解放军新闻传播中心数字记者暨全军首位超写实虚拟数字军人征名&#xff0c;历时一个多月&#xff0c;经过征名提交、评委初评、公众投票、专家共…

一种基于NB‑IOT的粮库挡粮门异动监测装置

一种基于NB‑IOT的粮库挡粮门异动监测装置,包括若干个NB‑IOT开门监测装置、物联网后台管理系统、NB‑IOT低功耗广域网络和用户访问终端;各个NB‑IOT开门监测装置通过NB‑IOT低功耗广域网络与物联网后台管理系统连接,物联网后台管理系统与用户访问终端连接。 我国以往粮食收储…

类BERT模型蒸馏原理

如果你曾经训练过 BERT 或 RoBERTa 等大型 NLP 模型&#xff0c;就就会知道这个过程非常漫长。 由于此类模型规模庞大&#xff0c;训练可能会持续数天。 当需要在小型设备上运行它们时&#xff0c;可能会发现你正在为当今不断提高的性能付出巨大的内存和时间成本。 幸运的是&a…
最新文章