技术标签: 算法
题目 : https://leetcode-cn.com/problems/increasing-triplet-subsequence/
给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。
数学表达式如下:
如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,
使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。
说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。
示例 1:
输入: [1,2,3,4,5]
输出: true
示例 2:
输入: [5,4,3,2,1]
输出: false
class Solution:
def increasingTriplet(self, nums: List[int]) -> bool:
if len(nums)<3:
return Flase
min_num = nums[0]
sec_num = float("inf")
for i in range(1,len(nums)):
if nums[i] < min_num:
min_num = nums[i]
elif nums[i] > min_num and nums[i] <sec_num:
sec_num = nums[i]
elif nums[i] > sec_num:
return True
return False
思路 :
这道题给我的时候,我是没有思路的,上网看了一遍答案,发现虽然大家都写出来了最终的算法,但是还没人聊聊这道题,为什么是用这个解法,尤其是为什么这种解法能保证所有的情况。
先说下这道题的思路: 首先找到一个相对小的值,然后找到比这个小一点的值大的值(中间值),然后看能够在最后找到比中间值大的值。
我来说下为什么这种思路能保证覆盖所有的情况。
首先,如果只有一个最小值,然后找不到中间值,那么这个数组必然不包含递增的三个数(因为连递增的两个数都找不到)。
然后假设我们找到了两个递增的值,那么如果下一个值小于最小值,我们就应该将最小值的指针定位到这个值上。我们尽可能的使用最小值,防止后面出现了更小的一对递增值,而即使不出现,也不妨碍我们找到解(因为最终是看能否找到大于中间值的值)。
如果下一个值大于最小值,且小于中间值,则我们使用该值作为中间值(因为如果最小的中间值都得不到解,那么就是false,这样也保证了覆盖所有的情况)。
最后,如果找到了大于中间值的值,则为true.
作者:liu-fei-3
链接:https://leetcode-cn.com/problems/increasing-triplet-subsequence/solution/shi-yong-shuang-zhi-zhen-qiu-jie-by-liu-fei-3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
点亮第一个LED引脚取名:sbit 变量名 = 地址值#include "reg52.h"sbit led=P2^0;void main(){ while(1) { led=0; }}_hc6800-es v2.0 lcd
maven搭建maven的作业:maven方便自动导入jar包、maven的核心思想:约定大于配置。maven会规定好如何去编写java代码。1、下载地址地址:https://maven.apache.org/2、环境变量配置M2_HOME maven目录下的bin目录MAVEN_HOME maven的目录在系统的path中配置MAVEN_HOME %MAVEN_HOME%\bin3、检测环境变量在cmd中输入mvn -version4、修改镜像为什么要修改镜像呢,镜像是为了加速
一、版本校对32位64位 分清楚 带i32xx或者i68xx,多为32版本 勿选deb rpm tar 包分清楚 centOS带 rpm,tar关键字CentOS5 CentOS 6 CentOS 7 分清楚 e16 位 CentOS 6 e17 位 CentOS7删除本次演示问CentOS7 ,自带玛丽亚DB,需要卸载rpm -qa | grep marirpm -e --nodes 包名需复制二、下载从下的包,既可以看出本次的安装方式rpm安装编译安装、rpm安装、yum安
EF中遇到多表查询问题,这两张表属于两个不同的数据库,这两张表事实上是有外键的,但是只是数据库中没有设外键,所以就不能像标准EF做法,直接取外键。 比如A数据库中 T_Students (SID,Name,Sex,Age,...) 和 B数据库中T_StuScore(SCID,SID,Score,...) IQueryable<T_Students> students = ..._ef6 多表查询 except
1.上图2.怎么做呢?(我的笨方法)2.1先给单元格加按钮2.2给按钮添加单击事件varlayIndex;// 便于赋值$(document).on('click',' .subnamebtn',function(){//尽量使用动态绑定 layIndex=$(this).data("index"); modules.inoutSelectPop(); })2.2..._layui表格单元格添加按钮
目录开发DNN下一步在这里,我们将建议一种DNN模型,用于检测图像上的驼鹿。然后,我们将提供Python代码来生成输入数据,以使用Caffe训练DNN。然后我们解释如何启动Caffe。最后,我们展示了训练日志并解释了结果。下载源34.8 KB 下载模型-26 MB(外部链接)野蛮的野生生物可能给企业和房主带来痛苦。鹿、驼鹿甚至猫等动物都会对花园、庄稼和财产造成破坏。在本系列文章中,我们将演示如何在Raspberry Pi上实时(或近实时)检测有害生物(例如驼鹿),然后采取措施消除有害_dnn训练结果
阿里在GitHub上的开源工具https://github.com/oldmanpushcart/greys-anatomy摘要:线上系统为何经常出错?数据库为何屡遭黑手?业务调用为何频频失败?连环异常堆栈案,究竟是那次调用所为? 数百台服务器意外雪崩背后又隐藏着什么?是软件的扭曲还是硬件的沦丧? 走进科学带你了解Greys, Java线上问题诊断工具。..._greys windows
1. 首先说的是Arduino接口,所有的nucleo系列都支持这个接口,而且像F767这种尺寸长的板子也有的,不过是双排排针,其实就是外侧也是Arduino接口2. 板子接上电脑之后有个串口转载于:https://www.cnblogs.com/429512065qhq/p/9527075.html..._nucleo板子为什么有两排排针
Chipset: MSM8X25QCodebase: Android4.1Kernel: 3.4.0 概念: Lowmemory killer是android基于oom killer做了改进。两者区别:Oom killer: 当系统内存不足时,会根据当前进程的内存使用状况以及oom score来Kill掉某个进程。Low memorykiller: 会周
在学习单点登录cas时,遇到如下错误:网上查找资料,因为默认值时间是1.8秒,当登录成功,携带ST返回客户端,客户端带着server和ST去服务器验证,但此时服务器端的ST已经失效我们修改_未能够识别出目标 'st-1-k1kr7coxxwblnhkmrbzcnf9pyiwdesktop-q3k3bve'票根
什么是HTTP协议协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器格式: request(请求)请求方式 请求资源 请求协议、请求协议版本(request_method request-uri request-protocol reques_http请求回文处理
数据情况调用宏进行典型相关分析1、按File→New→Syntax的顺序新建一个语句窗口。在语句窗口中输入下面的语句:INCLUDE 'C:\Program Files (x86)\IBM\SPSS\Statistics\22\Samples\Simplified Chinese\Canonical correlation.sps'. CANCORR SET1=x1..._spss试卷开卷