LeetCode趣题

来源:互联网 发布:淘宝客服数据在哪看 编辑:程序博客网 时间:2024/06/07 04:03
本帖以收录LeetCode上面有趣的题目及其解法为目的。
  • Gas Station
    • 一上来想到的肯定是模拟,结果必然是O(n^2),运气够好的话不会超时,但~700ms的结果是必然的了。
    • O(n)的解法是有的,类似动归,从头开始遍历到底,记录gas和cost总量的差和每一站gas和cost的差距。
      • 如果<0,必然无解;
      • 否则的话,有解而且可能不止一个:每站差距里面cost比gas多的最多的那一站的下一站做起点必然是个可行解。
      • 运行时间在15ms左右。
  • Copy List With Random Pointer
    • 笨办法:当创建新的节点的时候,记住原来节点里的random指向的节点距离头或者尾的距离,然后在新链表里从头再遍历一遍,把random的指向给加上。此做法一定会TLE。
    • 改进的笨办法:记录距离的时候弄个字典,key是距离,value是所有指向这个距离的节点。这样加random那一步能快一些。不会TLE,但时间大的吓人,>1000ms。
    • 好办法:创建新节点的时候把它插入到原有节点的后面,创建了所有节点以后再遍历一次,把random加上,原来的节点对应的新节点,它的random是原来节点random的next。所以一次就搞定了所有的random值。最后再遍历一次,把两个链表剥离开,返回新的那个即可。
0 0
原创粉丝点击