LeetCode 410——分割数组的最大值

2018-10-27
阅读 2 分钟
3.4k
1. 题目 2. 解答 此题目为 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道——最小分割分数。 {代码...} 获取更多精彩,请关注「seniusen」!

LeetCode 29——两数相除

2018-10-25
阅读 2 分钟
2.9k
1. 题目 2. 解答 2.1. 方法一 题目要求不能使用乘法、除法和除余运算,但我们可以将除法转移到对数域。 $\frac{a}{b} = e^{\frac{lna}{lnb}} = e^{lna - lnb}$ 这样就转化为指数、对数和减法运算了。因为只能对正整数取对数,因此我们首先要将两个数都取绝对值,最后再加上符号。 同时,题目要求只能存储 32 位有符号整...

LeetCode 25 —— K 个一组翻转链表

2018-10-23
阅读 3 分钟
1.8k
1. 题目 2. 解答 首先,利用快慢指针确定链表的总结点数。 偶数个结点时,结点个数等于 i * 2。 奇数个结点时,结点个数等于 i * 2 + 1。 然后将链表的每 K 个结点划分为一组。循环对每组的子链表进行翻转,并依次拼接起来。 最后,将多余的结点拼接在新链表最后面即可。 代码如下 {代码...} 获取更多精彩,请关注「seni...

LeetCode 23 ——合并 K 个排序链表

2018-10-22
阅读 5 分钟
2.1k
假设每个链表结点数一样都为 n,第一次合并时,要遍历 2n 个结点,往后则要分别遍历 3n, 4n, ... , kn 个结点。可以看到,每次进行合并时都要将之前所有的链表遍历一次,因此这个方法的时间复杂度较高,为 $O((\frac{k(k+1)}{2} - 1) * n)$。

LeetCode 21 ——合并两个有序链表

2018-10-22
阅读 2 分钟
6.6k
新建一个带有哨兵结点的链表,依次比较两个有序链表的结点值,将较小值的结点插入到新链表后面。直到其中一个比较完毕,将另一个链表剩余的结点全部放到新链表最后面即可。最后,可以删除哨兵结点,或者直接返回哨兵结点后第一个结点指针。

LeetCode 237 ——删除链表中的结点

2018-10-22
阅读 1 分钟
1.8k
因为给定的只有一个待删除的结点指针,我们并不知道其前面结点,所以需要将待删除结点后面的结点值复制到前面结点去,然后指向其后的第二个结点即可。

LeetCode 19——删除链表的倒数第 N 个节点

2018-10-20
阅读 3 分钟
3.6k
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明:给定的 n 保证是有效的。 进阶:你能尝试使用一趟扫描实现吗?

LeetCode 215——数组中的第 K 个最大元素

2018-10-18
阅读 4 分钟
3.5k
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4 说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

LeetCode 622——设计循环队列

2018-10-15
阅读 4 分钟
3.7k
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。

LeetCode 234——回文链表

2018-10-13
阅读 4 分钟
1.9k
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2: 输入: 1->2->2->1输出: true 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

LeetCode 876——链表的中间结点

2018-10-13
阅读 2 分钟
2.6k
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans...

LeetCode 206——反转链表

2018-10-12
阅读 3 分钟
3.1k
迭代法从前往后遍历链表,定义三个指针分别指向相邻的三个结点,反转前两个结点,即让第二个结点指向第一个结点。然后依次往后移动指针,直到第二个结点为空结束,再处理链表头尾即可。