Re: [閒聊] 每日LeetCode

看板Marginalman作者 (みけねこ的鼻屎)時間1年前 (2022/10/11 11:21), 1年前編輯推噓2(200)
留言2則, 2人參與, 1年前最新討論串42/719 (看更多)
334. Increasing Triplet Subsequence 給予一個陣列,判斷是否存在一個嚴格遞增的子序列。 Example 1: Input: nums = [1,2,3,4,5] Output: true Explanation: Any triplet where i < j < k is valid. 思路: 1.維護兩個整數分別表示序列裡最小值min和第二大的值mid,前者初始化為陣列第一個 數字,後者初始化為一個極大值。 2.遍歷陣列: > 若數字n比最小值min還小,更新min為更小的值 > 若數字n比最小值min還大且比mid小,則更新mid為較小的值 > 若數字n比mid還大表示[min, mid, n] 組成了嚴格遞增序列,返回true。 3.由於產生新的mid前保證了一定有一個數小於mid,因此保證了即使min變成其他更小的 數了,只要存在一個大於mid的值,仍可組成遞增序列。 4 5 1 9 min = 4, mid = 5 4 5 1 9 min = 1, mid = 5 4 5 1 9 min = 1, mid = 5 [1, 5, 9] 雖然不是一個序列(沒照順序),但是因為我們更新mid之前都會檢查是否 比min大(新的mid一定比舊的min還大),所以可以他可以被還原成舊的min,1 ==> 4 [4, 5, 9]。 4.若遍歷完陣列都找不到比mid還大的n,返回false。 JavaCode: class Solution { public boolean increasingTriplet(int[] nums) { if (nums.length < 3) return false; int min = nums[0], mid = Integer.MAX_VALUE; for (int i = 1; i < nums.length; i++) { if (nums[i] < min) min = nums[i]; else if (nums[i] > mid) return true; else if (nums[i] > min && nums[i] < mid) mid = nums[i]; } return false; } } 這題(O^2)就會TLE了...好嚴格 -- https://i.imgur.com/PIoxddO.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.6.111 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1665458481.A.7B3.html ※ 編輯: Rushia (36.231.6.111 臺灣), 10/11/2022 11:21:45

10/11 11:32, 1年前 , 1F
大師
10/11 11:32, 1F

10/11 11:35, 1年前 , 2F
大師
10/11 11:35, 2F
文章代碼(AID): #1ZHE4nUp (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1ZHE4nUp (Marginalman)