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

四元组问题

目录

问题描述

输入格式

输出格式

样例输入

样例输出

说明

评测数据规模

运行限制

原题链接

代码思路


问题描述

从小学开始,小明就是一个非常喜欢数学的孩子。他喜欢用数学的方式解决各种问题。在他的高中时期,他遇到了一个非常有趣的问题,那就是给定一个长度为 n 的整数数组 nums ,判断是否存在四个不同的下标 a,b,c,d ,使得 a < b < c < d ,并且 nums[d] < nums[c] < nums[a] < nums[b] 。

小明非常喜欢这个问题,他决定用数学的方式来解决它。他首先想到了一个非常简单的方法,那就是暴力枚举。他用四个循环来枚举所有可能的下标组合,然后判断是否满足条件。但是这个方法非常耗时,当 n 很大时,计算量会非常大。

所以请求你给出一个快速智慧的解决办法。

输入格式

输入仅两行,第一行包含一个整数 n ,第二行包含 n 个整数,其含义如上所述。

输出格式

输出仅一行,包含一个字符串, YES 表示题目存在上面所描述的情况,否则输出 NO 。

样例输入

4
3 4 2 1

样例输出

YES

说明

在样例中,当 a,b,c,d 分别等于 0,1,2,3 满足 a < b < c < d ,并且使得 nums[d] < nums[c] < nums[a] < nums[b]。

评测数据规模

对于 50% 的评测数据,4≤n≤200,−200≤nums[i]≤200 。

对于 100% 的评测数据,4≤n≤5×105,−109≤nums[i]≤109 。

运行限制

语言最大运行时间最大运行内存
C++1s512M
C1s512M
Java2s512M
Python33s512M
PyPy33s512M
Go3s64M
JavaScript3s64M

原题链接

四元组问题icon-default.png?t=O83Ahttps://www.lanqiao.cn/problems/3416/learning/

代码思路

import java.util.Scanner;
import java.util.Stack;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int nums[] = new int[n];// smnum数组中每个值代表num[i]后面的最小的数.// 如:smnum[i]的值是num[i]后面的最小的数.int smnum[] = new int[n];for (int i = 0; i < nums.length; i++) {nums[i] = scanner.nextInt();}smnum[n - 1] = Integer.MAX_VALUE;// 因为题目中最大索引的值反而最小,所以要倒序.for (int i = n - 1; i >= 1; i--) {smnum[i - 1] = Math.min(smnum[i], nums[i]);}int a = Integer.MIN_VALUE;// 用先进后出的栈也可以,用先进先出的队列也可以,,但用栈符合一般的逻辑习惯.// 上面的理由是这一步stack.peek() < nums[i],提供的.Stack<Integer> stack = new Stack<Integer>();for (int i = 0; i < nums.length; i++) {// 题中要求是 		  nums[d] < nums[c] < nums[a] < nums[b]// 与上面的一一对应   smnum[i]  nums[i]      a      栈里的元素if (a > nums[i] && nums[i] > smnum[i]) {System.out.println("YES");return;}while (!stack.isEmpty() && stack.peek() < nums[i]) {// 因为a的值都是小于nums[i]的,所以栈里必有索引小于i且值大于a的.// pop()出栈,是为了提高效率.// 要是使用peek(),会超时.a = Math.max(a, stack.pop());}stack.push(nums[i]);}// 没return,则输出NO.System.out.println("NO");}
}

http://www.lryc.cn/news/446429.html

相关文章:

  • 如何用Prometheus监控禁用了Actuator的SpringBoot?
  • 使用TensorFlow实现一个简单的神经网络:从入门到精通
  • 应用DFX能力介绍
  • 第三篇 第20章工程计价数字化与智能化
  • 成语700词(46~65组)
  • linux如何配置静态IP
  • Dependency Check:一款针对应用程序依赖组件的安全检测工具
  • Python 从入门到实战28(文件的读操作)
  • [leetcode刷题]面试经典150题之7同构字符串(简单)
  • 【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】
  • 【rust】 基于rust编写wasm,实现markdown转换为html文本
  • Java中的反向代理与负载均衡:Nginx与Java服务的集成
  • 高级java每日一道面试题-2024年9月26日-运维篇[分布式篇]-如何保证每个服务器的时间都是同步的?
  • 探索MemGPT:AI界的新宠儿
  • 处理RabbitMQ连接和认证问题
  • FFmpeg中结构释放小函数
  • C语言中的一些小知识(三)
  • 编译win2k3中tools目录下i386mk.inc文件的作用
  • IPSec隧道协议学习(一)
  • 计网作业3
  • 什么是注入攻击???
  • 牛客小白月赛101(A~E)
  • MFC设置特定控件字体大小和背景颜色
  • 专题八_链表_算法专题详细总结
  • Vue3使用vue-quill富文本编辑器实现图片大小调整
  • 感知笔记1:ROS 视觉- 跟随红球
  • JAVA多线程机制
  • Element-plus安装及其基础组件使用
  • [产品管理-38]:创意、市场机会、商业可行性的区别
  • 开源标注工具