摘要:復(fù)雜度思路維護(hù)一個(gè)里面有最大值和最小值。如果當(dāng)前值小于的最小值,那么就將原來(lái)的壓進(jìn)去棧,然后在用這個(gè)新的的值再進(jìn)行更新。如果沒(méi)有適合返回的值,就重新更新當(dāng)前的。
Leetcode[132] Pattern
Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that i < j < k and ai < ak < aj. Design an algorithm that takes a list of n numbers as input and checks whether there is a 132 pattern in the list.
Note: n will be less than 15,000.
Example 1: Input: [1, 2, 3, 4] Output: False Explanation: There is no 132 pattern in the sequence. Example 2: Input: [3, 1, 4, 2] Output: True Explanation: There is a 132 pattern in the sequence: [1, 4, 2].Stack
復(fù)雜度
O(N),O(N)
思路
維護(hù)一個(gè)pair, 里面有最大值和最小值。如果當(dāng)前值小于pair的最小值,那么就將原來(lái)的pair壓進(jìn)去棧,然后在用這個(gè)新的pair的值再進(jìn)行更新。如果當(dāng)前值大于pair的最大值,首先這個(gè)值和原來(lái)在stack里面的那些pair進(jìn)行比較,如果這個(gè)值比stack里面的值的max要大,就需要pop掉這個(gè)pair。如果沒(méi)有適合返回的值,就重新更新當(dāng)前的pair。
代碼
Class Pair { int min; int max; public Pair(int min, int max) { this.min = min; this.max = max; } } public boolean find123Pattern(int[] nums) { if(nums == null || nums.length < 3) return false; Pair cur = new Pair(nums[0], nums[0]); Stackstack = new Stack<>(); for(int i = 1; i < nums.length; i ++) { if(nums[i] < cur.min) { stack.push(cur); cur = new Pair(nums[i], nums[i]); } else if(nums[i] > cur.max) { while(!stack.isEmpty() && stack.peek().max <= nums[i]) { stack.pop(); } if(!stack.isEmpty() && stack.peek.max > nums[i]) { return true; } cur.max = nums[i]; } else if(nums[i] > cur.min && nums[i] < cur.max) { return true; } } return false; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/69793.html
摘要:記錄即之前,里的最小值,即題目里的即所有不滿(mǎn)足的直接跳過(guò)。已知那么找一個(gè)比大,又盡可能小的數(shù)找滿(mǎn)足就最可能。找到后,比較是否滿(mǎn)足滿(mǎn)足就返回更新棧頂元素,表示表示 Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that i < j < k an...
摘要:題目要求現(xiàn)在有一個(gè)字符串,將分割為多個(gè)子字符串從而保證每個(gè)子字符串都是回?cái)?shù)。我們只需要找到所有可以構(gòu)成回?cái)?shù)的并且得出最小值即可。即將字符作為,將字符所在的下標(biāo)列表作為。再采用上面所說(shuō)的方法,利用中間結(jié)果得出最小分割次數(shù)。 題目要求 Given a string s, partition s such that every substring of the partition is a ...
摘要:用表示當(dāng)前位置最少需要切幾次使每個(gè)部分都是回文。表示到這部分是回文。如果是回文,則不需重復(fù)該部分的搜索。使用的好處就是可以的時(shí)間,也就是判斷頭尾就可以確定回文。不需要依次檢查中間部分。 Given a string s, partition s such that every substring of the partition is a palindrome. Return the...
摘要:前言寫(xiě)這篇文章不是空穴來(lái)風(fēng),最近一個(gè)禮拜寫(xiě)了一個(gè)簡(jiǎn)單的腳本,用來(lái)處理上千個(gè)文件,以便于在某些特定字符的周?chē)砑訕?biāo)記,先說(shuō)一下我這個(gè)腳本使用場(chǎng)景主要是來(lái)識(shí)別中文具體做什么,之后會(huì)單獨(dú)寫(xiě)一篇文章,此處只提該腳本作用,同時(shí)為不同的文件類(lèi)型,包括, 前言 寫(xiě)這篇文章不是空穴來(lái)風(fēng),最近一個(gè)禮拜寫(xiě)了一個(gè)簡(jiǎn)單的nodejs腳本,用來(lái)處理上千個(gè)文件,以便于在某些特定字符的周?chē)砑訕?biāo)記,先說(shuō)一下我這個(gè)腳...
摘要:找規(guī)律復(fù)雜度時(shí)間空間思路由于我們只要得到第個(gè)全排列,而不是所有全排列,我們不一定要將所有可能都搜索一遍。根據(jù)全排列順序的性質(zhì),我們可以總結(jié)出一個(gè)規(guī)律假設(shè)全排列有個(gè)數(shù)組成,則第個(gè)全排列的第一位是。然后將得到,這個(gè)就是下一輪的。 Permutation Sequence The set [1,2,3,…,n] contains a total of n! unique permutati...
閱讀 1508·2021-10-11 10:59
閱讀 1881·2021-09-09 11:36
閱讀 1393·2019-08-30 15:55
閱讀 1329·2019-08-29 11:20
閱讀 3064·2019-08-26 13:39
閱讀 1468·2019-08-26 13:37
閱讀 1960·2019-08-26 12:11
閱讀 1324·2019-08-23 14:28