博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第九届蓝桥杯Java试题6--递增三元组
阅读量:4170 次
发布时间:2019-05-26

本文共 1074 字,大约阅读时间需要 3 分钟。

第九届蓝桥杯Java试题–递增三元组

题目:

给定三个整数数组

A = [A1, A2, … AN],
B = [B1, B2, … BN],
C = [C1, C2, … CN],
请你统计有多少个三元组(i, j, k) 满足:

  1. 1 <= i, j, k <= N
  2. Ai < Bj < Ck

【输入格式】

第一行包含一个整数N。

第二行包含N个整数A1, A2, … AN。
第三行包含N个整数B1, B2, … BN。
第四行包含N个整数C1, C2, … CN。

对于30%的数据,1 <= N <= 100

对于60%的数据,1 <= N <= 1000
对于100%的数据,1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000

【输出格式】

一个整数表示答案

【输入样例】

3

1 1 1
2 2 2
3 3 3

【输出样例】

27

资源约定:

峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

分析:这道题我首先想到的是暴力计算,通过嵌套三个循环将所有组合全部循环出,对每个组合判断,最终得出结果,但如果给出的N很大,如果N=1000000,则次循环需要循环100000* 100000* 100000次,显然这种方法不是很合适。

如果将后三行中的第二行作为参考,建立两个数组min[ ] 和max[ ] ,将中间一行元素进行遍历,min数组用来保存上一行中比中间行元素小的个数,例如:上两行为:
2 6 3
3 7 5
那么min[0] = 1,因为第一行只有2比3小,则min[1] = 3,min[2] = 2。
同理再中间这行和最后一行元素,用max保存最后一行比中间行大的元素的个数。

最后将min数组和max数组对应元素相乘,并将结果相加,得出最终结果。

代码:

import java.util.Scanner;public class Demo1 {	public static void main(String[] args) {		Scanner in=new Scanner(System.in);		int sum=0;		int n=in.nextInt();		int [][] a=new int[3][n];		int min[]=new int[n];		int max[]=new int[n];		for(int i=0;i<3;i++)			for(int j=0;j

这应该不是最简便的方法,但比起第一种还是有所进步的,应该会比第一种好些。

转载地址:http://wzwai.baihongyu.com/

你可能感兴趣的文章
用Docker搭建Redis主从复制的集群
查看>>
盘点这些年我出的书,以及由此得到的收获
查看>>
用Python的Pandas和Matplotlib绘制股票KDJ指标线
查看>>
面试必问:对java多线程里Synchronized的思考
查看>>
最近接了本分布式组件面试书的选题,请大家一起来提意见
查看>>
Redis整合MySQL和MyCAT分库组件(来源是我的新书)
查看>>
Java程序员普遍存在的面试问题以及应对之道(新书第一章节摘录)
查看>>
程序员高效出书避坑和实践指南
查看>>
计算机方面毕业生怎样写简历
查看>>
从软件公司的异同点讲起,聊聊未来的程序员该如何选公司和谋规划
查看>>
我不想安于当前的限度,以达到所谓的幸福,回顾下2020年的我
查看>>
如何在面试中介绍自己的项目经验(面向java改进版)
查看>>
通过写n本书的积累,我似乎找到了写好技术文章的方法(回复送我写的python股票电子书)
查看>>
如果很好说出finalize用法,面试官会认为你很资深
查看>>
Java面试官经验谈:如何甄别候选人真实的能力,候选人如何展示值钱技能
查看>>
分析若干没面试机会和没体现实力的简历
查看>>
用python的matplotlib和numpy库绘制股票K线均线
查看>>
以互联网公司的经验告诉大家,架构师究竟比高级开发厉害在哪?
查看>>
GanttProject 使用的控件第三方包:jdnc-modifBen.jar
查看>>
ps、grep和kill联合使用杀掉进程
查看>>