返回信息流同样的算法
golang 1600ms
java 2ms
还是我写的有问题?
go:
```go
func help(node *ListNode, len int) (*TreeNode, *ListNode) {
if len == 0 {
return nil, node
} else if len == 1 {
return &TreeNode{node.Val, nil, nil}, node.Next
} else {
k1, v1 := help(node, (len - 1) / 2)
k2, v2 := help(v1, 1)
k3, v3 := help(v2, len - 1 - (len - 1) / 2)
k2.Left = k1
k2.Right = k3
return k2, v3
}
}
func linkLen(node *ListNode) int {
count := 0
for node != nil {
count++
node = node.Next
}
return count
}
func sortedListToBST(head *ListNode) *TreeNode {
len := linkLen(head)
root, _ := help(head, len)
return root
}
```
java:
```java
class Result
{
TreeNode node;
ListNode list;
}
public class Solution {
public TreeNode sortedListToBST(ListNode head) {
int len=0;
ListNode p1=head;
while (p1!=null)
{
p1=p1.next;
len++;
}
Result r=func(head,len);
return r.node;
}
Result func(ListNode start,int len)
{
if(start==null||len==0)
{
Result r=new Result();
r.list=null;
r.node=null;
return r;
}
if(len==1)
{
Result r=new Result();
r.node=new TreeNode(start.val);
r.list=start.next;
return r;
}
int n1=len/2;
int n2=len-len/2-1;
Result r1=func(start,n1);
Result r2=func(r1.list,1);
Result r3=func(r2.list,n2);
r2.node.left=r1.node;
r2.node.right=r3.node;
if(r3.list!=null)
r2.list=r3.list;
return r2;
}
}
```
这是一条镜像帖。来源:北邮人论坛 / golang / #628同步于 2016/10/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖
leetcode109用golang为什么如此之慢?
xinjiangnu
2016/10/11镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
这是leetcode109:
https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/
我用golang刷过一遍了。大概有五道题速度特别慢,还有道周赛上的题golang有bug无解。109就是,239也是。这道题之前golang是无论如何都过不去的。最后我发邮件给客服,他们后台把golang时间限制给弄大了才过的。
【 在 NachtZ 的大作中提到: 】
: 我用golang刷过一遍了。大概有五道题速度特别慢,还有道周赛上的题golang有bug无解。109就是,239也是。这道题之前golang是无论如何都过不去的。最后我发邮件给客服,他们后台把golang时间限制给弄大了才过的。
还能这样??!