日常刷题刷到一个要用到栈的问题,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>
更多评论
按理来说不应该啊,切片不是一个len cap 指针结构体吗?代价不会这么高啊。不过C艹的stack是用链表为底层实现的,还是说这里链表的效率比顺序存储更高?
go没有内置链表类型吧@.@?
#1
slice 的底层实现是数组,append 时如果数组容量不够会进行扩容影响性能。不过你的代码慢应该不是扩容导致的。
没记错的话 container/list go 内置的双向链表
#3