码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 456. 132 Pattern

时间:2018-10-10 17:07:10      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:pattern   地方   src   leetcode   自己实现   变量   过程   code   image   

技术分享图片

题目的意思就是给你一个数组 里面一堆数,你是否能找到这样三个数,第一个数比第三个数小,第二个数最大。比如 1, 3, 2 或者  4, 9, 5 这种,数字可以不连续在一起,但是要保证顺序不变,只要有这么一组数就可以。

这个题我做了一个小时没想到比较好的办法,去看了别人的思路,看懂以后回来自己实现的,不得不说,想法真的优秀。

思路是这样的,既然是三个数比较,我找到中间那个数就是 2 那个数,再找到一个比2大的, 再找到一个比2 小的,这样就存在这么一组数了。那如何能保证顺序没问题呢,从数组的后面遍历,设定一个临时变量temp 以及 一个栈,temp 用来保存 2 这个数,stack里面 用来保存 可以成为3 这个数,每次遍历到一个新的数字curr,先比较这个数有没有stack[-1]大,如果大的话,把栈里面所有比 当前数小的 出栈temp = stack.pop(),把当前数进栈。所以temp 就是一个比栈里小的数了,栈里存的就是一个较大的数,因为是从后面遍历且temp是从栈里出来的,所以顺序上也是没问题的。现在重复上面的过程,直到找到了一个 比temp 小的数,那么这组数就找到了。

技术分享图片

两个地方注意一下啊

为什么是while 循环出栈 改成if 可以吗?

可以考虑这么一组数[2, 4, 2, 3]

第二个temp = stack.pop()这里 怎么理解,为什么最后一个pop的数可以成为 temp,那之前出去的数呢?

还可以考虑这么一组数[2, 4, 2, 3]

哈哈哈

Leetcode 456. 132 Pattern

标签:pattern   地方   src   leetcode   自己实现   变量   过程   code   image   

原文地址:https://www.cnblogs.com/winder-knight/p/9767151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!