蓝桥杯 递增三元组

Problem: 蓝桥杯 递增三元组

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • 前缀和Code
  • 二分Code
  • 双指针Code

思路

这是一个关于数组的问题,我们需要找到一个递增的三元组。这个三元组由三个数组中的元素组成,每个数组提供一个元素,并且这三个元素满足递增的关系。

解题方法

我们可以使用三种方法来解决这个问题:前缀和,二分查找和双指针。
1、前缀和:我们首先对数组a和c进行计数,然后计算出前缀和。然后,我们遍历数组b,对于每一个元素bi,我们找到数组a中小于bi的元素数量和数组c中大于bi的元素数量,然后将这两个数量相乘,累加到结果中。
2、二分查找:我们首先对数组a和c进行排序。然后,我们遍历数组b,对于每一个元素bi,我们使用二分查找在数组a中找到小于bi的最大元素的位置,和在数组c中找到大于bi的最小元素的位置,然后将这两个位置相乘,累加到结果中。
3、双指针:我们首先对数组a,b和c进行排序。然后,我们使用两个指针,一个指向数组a的开始,一个指向数组c的开始。我们遍历数组b,对于每一个元素bi,我们移动数组a的指针,直到找到一个大于或等于bi的元素,然后移动数组c的指针,直到找到一个大于bi的元素,然后将这两个位置相乘,累加到结果中。

复杂度

时间复杂度:

对于前缀和和双指针方法,时间复杂度为 O ( n ) O(n) O(n)。对于二分查找方法,时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)

空间复杂度:

对于所有的方法,空间复杂度都为 O ( n ) O(n) O(n)

前缀和Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int MAXN = (int) (1e5 + 10);static int[] a = new int[MAXN];static int[] b = new int[MAXN];static int[] c = new int[MAXN];static int[] as = new int[MAXN];static int[] cs = new int[MAXN];static int n;public static void main(String[] args) throws IOException {n = nextInt();for (int i = 0; i < n; i++) {a[i] = nextInt();}for (int i = 0; i < n; i++) {b[i] = nextInt();}for (int i = 0; i < n; i++) {c[i] = nextInt();}for (int i = 0; i < n; i++) {as[a[i]]++;cs[c[i]]++;}// 计算出前缀和for (int i = 1; i < MAXN; i++) {as[i] += as[i - 1];cs[i] += cs[i - 1];}long res = 0;// 枚举枚举每一个bifor (int i = 0; i < n; i++) {if (b[i] == 0) {continue;}res += (long) as[b[i] - 1] * (long) (cs[MAXN - 1] - cs[b[i]]);}out.println(res);out.flush();}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}

二分Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int MAXN = (int) (1e5 + 10);static int[] a = new int[MAXN];static int[] b = new int[MAXN];static int[] c = new int[MAXN];static int n;public static void main(String[] args) throws IOException {n = nextInt();for (int i = 0; i < n; i++) {a[i] = nextInt();}for (int i = 0; i < n; i++) {b[i] = nextInt();}for (int i = 0; i < n; i++) {c[i] = nextInt();}Arrays.sort(a, 0, n);Arrays.sort(c, 0, n);// 二分查找 小于bi最右边的数字 目的尽可能多// 大于bi最左边的数字 目的是让数字尽可能多long res = 0;for (int i = 0; i < n; i++) {int left = getA(0, n - 1, b[i]);int right = getB(0, n - 1, b[i]);res += (long) (left + 1) * (n - right);}out.println(res);out.flush();}private static int getA(int l, int r, int x) {// TODO Auto-generated method stubwhile (l < r) {int mid = (l + r + 1) / 2;if (a[mid] < x) {l = mid;} else {r = mid - 1;}}return a[l] < x ? l : -1;}private static int getB(int l, int r, int x) {// TODO Auto-generated method stubwhile (l < r) {int mid = (l + r) / 2;if (c[mid] > x) {r = mid;} else {l = mid + 1;}}return c[r] > x ? r : n;}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}

双指针Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int MAXN = (int) (1e5 + 10);static int[] a = new int[MAXN];static int[] b = new int[MAXN];static int[] c = new int[MAXN];static int n;public static void main(String[] args) throws IOException {n = nextInt();for (int i = 0; i < n; i++) {a[i] = nextInt();}for (int i = 0; i < n; i++) {b[i] = nextInt();}for (int i = 0; i < n; i++) {c[i] = nextInt();}Arrays.sort(a, 0, n);Arrays.sort(b, 0, n);Arrays.sort(c, 0, n);// 使用双指针算法long res = 0;for (int i = 0, ai = 0, ci = 0; i < n; i++) {while (ai < n && a[ai] < b[i]) {ai++;}while (ci < n && c[ci] <= b[i]) {ci++;}res += (long) ai * (n - ci);}out.println(res);out.flush();}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unix环境高级编程-学习-05-TCP/IP协议与套接字

目录 一、概念 二、TCP/IP参考模型 三、客户端和服务端使用TCP通信过程 1、同一以太网下 四、函数介绍 1、socket &#xff08;1&#xff09;声明 &#xff08;2&#xff09;作用 &#xff08;3&#xff09;参数 &#xff08;4&#xff09;返回值 &#xff08;5&…

三星泄露微软 Copilot 新功能:用自然语言操控各种功能

3 月 11 日消息&#xff0c;微软计划本月晚些时候发布新款 Surface 电脑和适用于 Windows 11 的 Copilot 新功能&#xff0c;但三星似乎等不及了&#xff0c;在其即将推出的 Galaxy Book4 系列产品宣传材料中泄露了一些即将到来的 Copilot 功能。 三星官网上发布的图片证实了此…

在centOS服务器安装docker,并使用docker配置nacos

遇到安装慢的情况可以优先选择阿里镜像 安装docker 更新yum版本 yum update安装所需软件包 yum install -y yum-utils device-mapper-persistent-data lvm2添加Docker仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.rep…

SQLite—免费开源数据库系列文章目录

SQLite系列相关文章较多特开本文为了便于读者阅读特写了本索引和目录之用本文将不断更新中有需要的读者可以收藏本文便于导航到各个专题( 持续更新中......)。收藏一篇等于收藏一个系列文章 简介类&#xff1a; SQLite——世界上部署最广泛的免费开源数据库&#xff08;简介&…

【海贼王的数据航海】探究二叉树的奥秘

目录 1 -> 树的概念及结构 1.1 -> 树的概念 1.2 -> 树的相关概念 1.3 -> 树的表示 1.4 -> 树在实际中的运用(表示文件系统的目录树结构) 2 -> 二叉树概念及结构 2.1 -> 二叉树的概念 2.2 -> 现实中的二叉树 2.3 -> 特殊的二叉树 2.4 ->…

Post请求出现Request header is too large

问题描述&#xff1a; 在做项目的时候&#xff0c;前端请求体太大的时候&#xff0c;出现Request header is too large问题&#xff0c;后端接口如下&#xff1a; 前端请求接口返回问题如下&#xff1a; 解决方案&#xff1a; 问题原因&#xff1a;这是因为我们在做Springboo…

旅游管理系统|基于SpringBoot+ Mysql+Java+Tomcat技术的旅游管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 用户功能 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 …

反爬虫技术:如何保护你的网站数据安全

在数字化时代&#xff0c;数据的价值日益凸显&#xff0c;而爬虫技术则成为了获取这些数据的重要手段之一。然而&#xff0c;对于网站运营者来说&#xff0c;非法爬虫不仅会导致数据泄露&#xff0c;还可能给网站带来巨大的流量压力和安全隐患。因此&#xff0c;本文将探讨如何…

您的 GStreamer 安装缺少插件

最近在学习QMLQT。 在弄一个多媒体播放的软件时&#xff0c;提示我系统缺少某些组件。我的系统是20.04.1-Ubuntu。 然后我看了很多帖子&#xff0c;大概思路就是&#xff0c;要装gstreamer 相关的组件。如果是比价低的ubunutu系统 就得装 gstreamer 0.10 的插件。如果是比价…

QT6.6 android下fftw-3.3.10库编译及调用so库方法

一.实现目标 fftw-3.3.10库在QT6.6的android环境下编译为so文件,然后在android项目中进行调用测试。 说明:编译的前提是要先部署好QT的android开发环境,具体可以参照本专栏文章《QT6.6 android开发环境搭建》,文章链接: https://blog.csdn.net/xieliru/article/detail…

【深度学习】YOLOv9继续训练——断点训练方法

YOLOv9继续训练主要分为两个情况&#xff1a; 其一、训练过程中意外中断&#xff0c;未完成训练预期的epoch数量&#xff1b; 其二、训练完了&#xff0c;但是未收敛&#xff0c;在这个基础上&#xff0c;还想用这个权重、学习率等参数继续训练多一些轮次 一、训练过程中意外…

循序渐进理解数据库基本概念

数据库 一、数据库基础 1.1、数据库系统概述 基本概念 数据&#xff1a;描述事物的符号记录称作数据&#xff0c;数据是数据库中存储的基本对象&#xff0c;描述事物可以是数字&#xff0c;文字&#xff0c;视频等数据库&#xff1a;长期存储在计算机内的、有组织的、可共享…

工作中常用的git命令

git 分布式版本控制系统。 使用远程仓库时候会有多个协议可以选择&#xff0c;使用https不仅仅速度慢&#xff0c;而且每次push都要输入口令。 HEAD 当前版本的指针&#xff0c;当切换本地版本的时候会快速指向指定版本文件 master git为我们创建主分支 origin 远程仓库的名…

Windows C++ TCP开发(使用select函数以及设置非阻塞/Reuse属性)

1、select官方函数说明&#xff1a; 语法 C int WSAAPI select([in] int nfds,[in, out] fd_set *readfds,[in, out] fd_set *writefds,[in, out] fd_set *exceptfds,[in] const timeval *timeout );参数 [in] nfds 已忽略。 包含 nf…

计算机等级考试:信息安全技术 知识点五

1、信息系统安全保障涵盖以下3个方面&#xff0c;生命周期、保障要素以及安全特征。 2、P2DR模型包括4个主要部分:策略、防护、检测以及响应&#xff0c;其中策略是模型的核心&#xff0c;所有的防护、检测和响应都是依据安全策略实施的 3、对称密钥体制也称为单密钥体制或传…

npm是如何处理多版本依赖的?

两种模式 nest模式 基本行为&#xff1a; 在require/import时&#xff0c;向上递归查找依赖&#xff0c;直到全局node_modules结束。 特点&#xff1a; 每个包在自己内部管理依赖&#xff0c;结构清晰简单。 不足&#xff1a; 如果A包和B包都依赖了axios&#xff0c;就会导致…

前端基础篇-深入了解 HTML 表格标签、表单标签和表单项标签

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 表格标签概述 1.1 表格标签定义 2.0 表单标签概述 2.1 表单标签定义 3.0 表单项标签概述 3.1 表单项标签定义 1.0 表格标签概述 顾名思义&#xff0c;就是用来…

Day38:安全开发-JavaEE应用SpringBoot框架MyBatis注入Thymeleaf模版注入

目录 SpringBoot-Web应用-路由响应 SpringBoot-数据库应用-Mybatis SpringBoot-模版引擎-Thymeleaf 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方库使用等. 框架…

【JavaEE初阶 -- 多线程2】

这里写目录标题 1.线程安全1.1 什么是线程安全1.2 原子性1.3 线程不安全的原因1.4 通过synchronized进行加锁解决线程安全问题1.5 可重入锁1.6 死锁1.7 Java标准库中的线程安全类1.8 通过volatile关键字解决内存可见性引起的线程安全问题 2. wait 和notify2.1 wait() --使当前线…

【30天】Python从入门到精通详解版—第一天—Python 基础语法详细讲解-上

【30天】Python从入门到精通详解版—第一天—Python 基础语法详细讲解-上 Python变量Python数据类型数字类型&#xff08;Number&#xff09;字符串类型&#xff08;String&#xff09;列表类型&#xff08;List&#xff09;元组类型&#xff08;Tuple&#xff09;字典类型&…