2 solutions
-
0
思路:模拟栈
什么是栈?
栈是一个先进后出的容器,你可以理解为一个只有一边能够打开的羽毛球筒,那我们想把最里面的羽毛球取出来,就得把所有羽毛球都取出来,这就是栈。
我们需要将给出的 个正整数逐一加入到栈中,但是在每次入栈时,如果我们发现有以下两种情况,就需要做出相应的操作:
- 当前数 和栈顶 是同一个数,那么我们需要取出栈顶数 ,并将一个新的数 或者说是 加入到栈中
- 当前数 和栈顶开始往下的任意个数()的数的和相等,那么我们需要将所有这些数都取出来,并把一个新的数 加入到栈中
由于正整数个数 的范围为[1,1000],因此直接模拟栈实现题目所要求的操作即可。
唯一需要注意的是,在将数字合并之后再次压入栈的同时,可能还会触发数字合并的操作,比如说:
当前栈中有3个数,分别为2,4,3。此时,我们需要将一个数3加入到栈中,我们先是触发了第一个情况,于是我们把3取出,得到了一个新的数 ,并准备将6加入到栈中。这时栈里面有2个数分别为2,4,于是我们又触发了第二个条件,取出2和4,并得到了数字12。
最终,栈里面仅有一个数字,也就是12。
在最坏情况下,在每次压入栈时,都会遍历前面所有数字判断是否有数字(或者一串数字的和)与入栈数字相等(比如一个单调递减的序列),因此该方法的时间复杂度为:
代码
C++
python
Java
Go
Js
- 1
Information
- ID
- 22
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 3
- Tags
- # Submissions
- 316
- Accepted
- 67
- Uploaded By