日常刷题刷到一个要用到栈的问题,go没有内置stack就用切片实现了,然而效率低的过分,不知道是不是我不会用导致的,发给大家看看。
这是golang用时和代码:
![image.png](https://static.studygolang.com/180429/2eb27ace8260cab2f024385da75d63e9.png)
这是C艹用时:
![image.png](https://static.studygolang.com/180429/bb76f0eab74c890b09bb65433d04c679.png)
C艹代码:
<pre><code>
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int size=temperatures.size();
vector<int> res(size);
stack<int> s;
s.push(size-1);
for(int i=size-2;i>=0;i--){
while(!s.empty() && temperatures[s.top()]<=temperatures[i])
s.pop();
if(!s.empty())
res[i]=s.top()-i;
s.push(i);
}
return res;
}
};
</code></pre>
这操作感觉有点骚…………
切应该是数组吧?
虽然没测试过,但按常理,对切片append的话,应该是整个复制出来的吧。
不然切片没切到尾的话怎么操作。
记得当年学C的时候,stack应该是用链表实现的吧?
#5
更多评论
按理来说不应该啊,切片不是一个len cap 指针结构体吗?代价不会这么高啊。不过C艹的stack是用链表为底层实现的,还是说这里链表的效率比顺序存储更高?
go没有内置链表类型吧@.@?
#1