如何伪原创 网站,模板和网站的区别,网站添加微信分享代码,招聘网站开发背景题目的意思就是给你一个数组 里面一堆数#xff0c;你是否能找到这样三个数#xff0c;第一个数比第三个数小#xff0c;第二个数最大。比如 1, 3, 2 或者 4, 9, 5 这种#xff0c;数字可以不连续在一起#xff0c;但是要保证顺序不变#xff0c;只要有这么一组数就可以… 题目的意思就是给你一个数组 里面一堆数你是否能找到这样三个数第一个数比第三个数小第二个数最大。比如 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] 哈哈哈转载于:https://www.cnblogs.com/winder-knight/p/9767151.html