随笔分类 -  剑指Offer题解+leetcode部分题解

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