LeetCode
来瓶小酱油
这个作者很懒,什么都没留下…
展开
-
Copy list with random pointer
深拷贝一个链表很简单,遍历链表,得到其中的数据,再根据这个数据创建节点,每创建一个节点就将其串联起来。但本题中节点与节点有两种关系,单链表只有一种向下传递的关系,这里多了一个随机指针。那么在遍历原始链表时就不能同时拷贝其随机指针,因为随机指针指向随机,很可能指向还未遍历到的节点,那么新链表中对应的节点也就没被创建好,无从指向。由此得知,随机指针必须有所指,那么必须在所有新的节点创建完成之后,才能将随原创 2017-03-09 10:45:57 · 233 阅读 · 0 评论 -
Convert sorted list to binary search tree
从head指针开始,直到fast指针为null或者fast->next==null为止,找到这个链表的中间节点。利用这个中间节点构造出该子树的根节点,再将中间节点的左边的节点的next指针置空,目的是不使用额外参数控制该段的边界。递归地初始化左子树,以及右子树。class Solution {public: TreeNode *sortedListToBST(ListNode *head)原创 2017-03-11 12:31:40 · 287 阅读 · 0 评论 -
Linked list cycle [leetcode]
在不破坏链表的情况下,通过两个指针,一个每次走过两个节点,另一个每次走过一个节点,即快慢指针。如果存在环路,那么快的指针会先走入环中,开始它的环绕之旅,等到慢的指针进入了环内,不论快指针在哪,慢指针相对于快指针是有一定的位置领先的,但是快指针每次都追上满指针一个身位,会在慢指针没有全部走完这一圈时追上慢指针。当两个指针重合时,那么说明这个链表有环,如果快指针有指向nullptr时,这个链表就是没有环原创 2017-03-15 08:49:03 · 193 阅读 · 0 评论 -
Rotate list [leetcode]
我这题写得像老奶奶缝补臭袜子。 最开始通过了3%的样例,是因为没有判断head==nullptr,写了之后通过了6%。后来又把k=k%len加上去了,这回才AC。这题简单粗暴,按照题目上说的逻辑来拆分组合链表就好了,要注意的就是异常情况的处理。牛客网上的数据头一个就是判断对最简单异常情况的处理,每次发生这种错误的时候就要提醒自己,提交前异常情况处理了吗?都考虑周到了吗?毕竟以后面试笔试的时候可没人原创 2017-03-15 08:54:45 · 293 阅读 · 0 评论 -
Merge two sorted list [leetcode]
正常的链表操作。class Solution {public: ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { if (l1 == nullptr || l2 == nullptr) return (l1 == nullptr ? l2 : l1); ListNode *head = nullptr原创 2017-03-16 21:44:06 · 176 阅读 · 0 评论 -
Candy [leetcode]
类似于经典题目《滑雪》,给个链接 https://vijos.org/p/1011使用记忆化搜索,如果已经计算过的直接返回,否则才计算。查看当前节点左右的节点是否可以向下走,如果可以向下走并且不出界,说明当前节点需要比两边节点更大的一个持有更多的糖,那么两边节点的糖数也是如此计算的,最少的糖数是1,通过最后一句dp[position]=++maxs得到。const int maxn = 100000原创 2017-03-17 00:05:26 · 287 阅读 · 0 评论