从零学算法334

news/2024/12/5 9:56:38/

334.给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。
如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。
示例 1:
输入:nums = [1,2,3,4,5]
输出:true
解释:任何 i < j < k 的三元组都满足题意
示例 2:
输入:nums = [5,4,3,2,1]
输出:false
解释:不存在满足题意的三元组
示例 3:
输入:nums = [2,1,5,0,4,6]
输出:true
解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6

  • 我的原始人解法:题意我可以理解为,有一个数,存在它前面的某个数小于它,它后面的某个数大于它,就能返回 true
  • 从第二个数往后遍历,因为只要之前存在某个数小于它即可,所以随遍历记录前面的最小值即可,这个实现很简单
  • 实现了一半了。同理因为只需满足后面的某个数大于它,所以我们要得到对当前数来说,后面所有数中的最大值,这里我们用一个 map 存储 nums 中下标 i 对应的后面所有数的最大值是多少,也就是 map<i, max(nums[i+1]~nums[length-1])>。我们逆序遍历 nums,对 i 的前一位来说,它后面的最大值要么是新出现的 nums[i],要么是之前得到的最大值,也就是 max(nums[i+1]~nums[length-1]),发现没,这其实就是 map.get(i)
  •   public boolean increasingTriplet(int[] nums) {int n = nums.length;if(n<3)return false;Map<Integer,Integer> map = new HashMap<>();// 最少要三个数,所以首尾的数我们都跳过判断// 对 n-2 来说他后面只有 nums[n-1],所以初始化它得到最初的 max(nums[i+1]~nums[length-1])map.put(n-2,nums[n-1]);for(int i=n-2;i>1;i--){map.put(i-1,Math.max(map.get(i), nums[i]));}for(int i=1;i<n-1;i++){if(nums[i]>nums[i-1] && nums[i]<map.get(i))return true;// 为了省点空间直接不断更新 nums[i-1] 为前面所有数的最小值nums[i] = Math.min(nums[i],nums[i-1]);}return false;}
    
  • 他人题解:其实只需要两个变量记录最小值 min 和次小值 mid 即可,先初始化他们为 Integer.MAX_VALUE,遍历 nums,如果一个数 num 大于 min,也大于 mid,就说明存在 min < mid < num 这样的序列,直接返回 true
  •   public boolean increasingTriplet(int[] nums) {int min = Integer.MAX_VALUE, mid = Integer.MAX_VALUE;for(int num : nums){if(num <= min)min = num;// 走到这说明 min 肯定是被赋值了,即 min 存在的else if(num<=mid) mid=num;// 走到这说明 mid 也存在,那你大于 mid 就表示存在 min < mid < numelse return true;}return false;}
    

http://www.ppmy.cn/news/1278739.html

相关文章

golang开发--beego入门

Beego 是一个基于 Go 语言的开源框架&#xff0c;用于构建 Web 应用程序和 API。它采用了一些常见的设计模式&#xff0c;以提高开发效率、代码可维护性和可扩展性。 一&#xff0c;MVC设计模式 Beego 框架采用了经典的 MVC&#xff08;Model-View-Controller&#xff09;设计…

临床医学VR仿真情景实训教学应用

一、VR医学仿真情景教学应用 临床医学VR仿真情景实训教学是一种将VR虚拟技术应用于医学教育的新型教学方法。通过模拟真实的医疗环境&#xff0c;学生可以在虚拟场景中进行实践操作&#xff0c;从而更好地理解和掌握医学知识。与传统医学教育方式相比&#xff0c;VR技术为医学…

odoo17核心概念——env

env在odoo中是一个非常重要的概念&#xff0c;它是一个全局变量&#xff0c;保存了odoo运行环境的重要信息&#xff0c;env分为前端和后端 一、环境(env) 1、前端的env 在web\static\src\env.js中定义&#xff0c;包含两个重要的对象&#xff1a; 全局数据总线bus&#xff…

pr插件|特殊编码.mkv/mov/flv/webm/avi/wmv/vob等多种格式视频素材直接导入pr的插件 Influx v1.2.5

适用于Adobe的一体式原生导入器插件&#xff08;Premiere Pro、After Effects和Media Encoder&#xff09;。支持多种格式和编解码器。 主要特点 直接在Adobe CC Video中进行本机导入 不再需要通过外部转码软件&#xff01;节省时间、磁盘空间和麻烦 在Premiere Pro中导入和编辑…

【大数据存储与处理】实验一 HBase 的基本操作

一、实验目的&#xff1a; 1. 掌握 Hbase 创建数据库表及删除数据库表 2. 掌握 Hbase 对数据库表数据的增、删、改、查。 二、实验内容&#xff1a; 1、题目 0&#xff1a;进入 hbase shell 2、题目 1&#xff1a;Hbase 创建数据库表 创建数据库表的命令&#xff1a;create 表…

【ECMAScript】DOM节点类型知识点的梳理和总结

1. 前言 本篇梳理和总结一下DOM相关知识点。 2. Node类型 属性和方法说明 Node.ELEMENT_NODE - 1 Node.ATTRIBUTE_NODE - 2 Node.TEXT_NODE - 3 Node.CDATA_SECTION_NODE - 4 Node.ENTITY_REFERENCE_NODE - 5 Node.ENTITY_NODE - 6 Node.PROCESSING_INSTRUCTION_NODE-7 Node.…

如何从 Android 手机免费恢复已删除的通话记录/历史记录?

有一个有合作意向的人给我打电话&#xff0c;但我没有接听。更糟糕的是&#xff0c;我错误地将其删除&#xff0c;认为这是一个骚扰电话。那么有没有办法从 Android 手机恢复已删除的通话记录呢&#xff1f;” 塞缪尔问道。如何在 Android 上恢复已删除的通话记录&#xff1f;如…

基于单片机设计的指纹锁(读取、录入、验证指纹)

一、前言 指纹识别技术是一种常见的生物识别技术&#xff0c;利用每个人指纹的唯一性进行身份认证。相比于传统的密码锁或者钥匙锁&#xff0c;指纹锁具有更高的安全性和便利性&#xff0c;以及防止钥匙丢失或密码泄露的优势。 基于单片机设计的指纹锁项目是利用STC89C52作为…