随笔分类 - 剑指Offer题解+leetcode部分题解
摘要:题目描述: 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 解法一:利用堆。 将K个链表的头节点放入堆中,然后依次取出,如果节点后面还有节点,就将节点继续放入堆中。 时间复杂度:O(kn*logk),n是链表中的元素个数,k是链表个数 空间复杂度
阅读全文
摘要:题目描述:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 O(nlogn)的时间复杂度第一时间就是归并排序了,然后要常数级空间,那就不能用递归。 原地归并 public ListNode sortList(ListNode head) { //如果只有一个节点直接返回 i
阅读全文
摘要:题目描述: 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。 正常思路下,要删除一个节点,首先找到他的前一个节点,让前一个节点(pre)的next 指向 pre.next.next,但对于该题中函数只给定了一个参数,也就是要删除的节点,于是这道题就
阅读全文
摘要:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 题目精巧的设置成逆序存储的链表,正好
阅读全文
摘要:题解直接写在LeetCode中 https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/chang-lian-biao-xian-zou-chang-du-chai-bu-liang-ge/
阅读全文
摘要:题目链接:https://leetcode-cn.com/problems/linked-list-cycle-ii/ 题目描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 解法一:哈希表。 遍历链表存入哈希表,如果哈希表中存在则返回该存在的节点。 public
阅读全文
摘要:题目地址:https://leetcode-cn.com/problems/linked-list-cycle/ 题目描述:给定一个链表,判断链表中是否有环。 解法一:哈希表。 遍历链表将每个节点存入哈希表中,哈希表中如果存在该节点,则说明有环。 时间复杂度:O(N),添加一个节点需要O(1). 空
阅读全文
摘要:题目描述: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 带有随机指针的链表结构 class Node { int val; Node next; Node random; public Node(int val) { th
阅读全文
摘要:题目地址:https://leetcode-cn.com/problems/merge-two-sorted-lists/ 题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 解法一:迭代,归并思想。 时间复杂度:O(M+N),两个链表的长度。
阅读全文
摘要:题目地址:https://leetcode-cn.com/problems/partition-list-lcci/ 题目描述:将一个链表以x值为“基准”,将链表分割成小于x的节点在x节点的左边,等于x,大于x的节点在右边。 解法一:遍历将链表中的每一个节点放入链表类型的数组中,对节点进行parti
阅读全文
摘要:题目描述:请判断一个链表是否为回文链表。 回文的意思就是,正着读跟反着读都是一样的。 题目地址:https://leetcode-cn.com/problems/palindrome-linked-list/ 解法一:栈 既然是正反进行比较,刚好利用栈的“先进后出”特点,出栈的顺序刚好就是反着读。
阅读全文
摘要:题目描述:在一个长度n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。 例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或者3。 解法一:利用辅助数组 创建一个长度为n+1的
阅读全文
摘要:题目描述: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 n
阅读全文
摘要:题目描述:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 由于Java中字符串(String)是不可变类型,所以不能修改原字符串。只能新建一个字符串实现。 实现思路: 新建一个StringBuilder,遍历字符串中的每一个字符,如果是' ',就将"%20"拼接到新字符串中,如果不是空
阅读全文
摘要:题目描述:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/ 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了
阅读全文
摘要:题目描述: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 题解1:递归。递归终止条件:head = null,意味着遍历到了链表的尾部,同时也意味着,可以回溯递归的值。 第一次递归:recur(1)->recur(3) 第二次递归:recur(3)->recur(2) 第三次
阅读全文
摘要:题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 解题思路:双指针 分别指向两个链表的头,比较大小即可。 问题:如何合并? 建立伪头节点temp,节点cur指向temp,将比较后的节点插入到cur后,最后将不为null的链表中剩余节点添加到cur之后即可。 参考题
阅读全文
摘要:题目描述: 输入一个链表,输出该链表中倒数第k个结点。 题目链接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&&tqId=11167&rp=1&ru=/ta/coding-interviews&
阅读全文
摘要:题目描述:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 题目链接:https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&&tqId=11185&rp=1&
阅读全文
摘要:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解题思路:双指针迭代。(如图head节点当成链表的第一个节点就好了,画的时候想的还不够清楚) 实现代码: //双指针迭代法 public ListNode reverseList
阅读全文