lintcode练习笔记
文章平均质量分 68
记录在lintcode刷题的过程,尽量记录下思路,加深印象,上传的代码都是AC的,如果有帮助请点个赞
Charles.zhang
朝闻道,夕死可矣。路漫漫其修远兮,吾将上下而求索。
展开
-
lintcode练习-37.反转一个3位整数
描述:反转一个只有3位数的整数。你可以假设输入一定是一个只有三位数的整数,这个整数大于等于100,小于1000。样例123 反转之后是 321。900 反转之后是 9。注意这个题需要考虑到负数的出现,所以要特别处理一下。第一种方法:class Solution: """ @param number: A 3-digit number. @return: Reversed n...原创 2018-05-17 14:57:02 · 387 阅读 · 0 评论 -
lintcode练习-145.大小写转换
描述将一个字符由小写字母转换为大写字母样例a -> Ab -> Bclass Solution: """ @param character: a character @return: a character """ def lowercaseToUppercase(self, character): # write your code her...原创 2018-05-17 15:15:15 · 1032 阅读 · 0 评论 -
lintcode练习-31. 数组划分
描述给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:所有小于k的元素移到左边 所有大于等于k的元素移到右边返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。你应该真正的划分数组 nums,而不仅仅只是计算比 k 小的整数数,如果数组 nums 中的所有元素都比 k 小,则返回 nums.length。您...原创 2018-08-03 22:02:18 · 238 阅读 · 0 评论 -
lintcode练习-184. 最大数
描述给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。最后的结果可能很大,所以我们返回一个字符串来代替这个整数。您在真实的面试中是否遇到过这个题? 是样例给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201。挑战在 O(nlogn) 的时间复杂度内完成。实现代码:注意:python3中内置函数没有比较函数,所以需要导入fu...原创 2018-08-08 16:50:54 · 392 阅读 · 0 评论 -
lintcode练习-148. 颜色分类
描述给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。我们可以使用整数 0,1 和 2 分别代表红,白,蓝。不能使用代码库中的排序函数来解决这个问题。排序需要在原数组中进行。您在真实的面试中是否遇到过这个题? 是样例给你数组 [1, 0, 1, 2], 需要将该数组原地排序为 [0, 1, 1, 2]。...原创 2018-08-08 16:57:44 · 224 阅读 · 0 评论 -
lintcode练习-387.最小值
描述给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[i],数组 B 中取 B[j],A[i] 和 B[j]两者的差越小越好(|A[i] - B[j]|)。返回最小差。您在真实的面试中是否遇到过这个题? 是样例给定数组 A = [3,4,6,7], B = [2,3,8,9],返回 0。挑战时间复杂度 O(n log n)实现代码:将A...原创 2018-08-08 17:20:10 · 219 阅读 · 0 评论 -
lintcode练习-399. Nuts 和 Bolts 的问题
描述给定一组 n 个不同大小的 nuts 和 n 个不同大小的 bolts。nuts 和 bolts 一一匹配。 不允许将 nut 之间互相比较,也不允许将 bolt 之间互相比较。也就是说,只许将 nut 与 bolt 进行比较, 或将 bolt 与 nut 进行比较。请比较 nut 与 bolt 的大小。您在真实的面试中是否遇到过这个题? 是样例给出 nuts = ['ab'...原创 2018-08-08 18:17:51 · 894 阅读 · 0 评论 -
lintcode练习-508. 摆动排序
描述给你一个没有排序的数组,请将原数组就地重新排列满足如下性质nums[0] <= nums[1] >= nums[2] <= nums[3]....请就地排序数组,也就是不需要额外数组您在真实的面试中是否遇到过这个题? 是样例给出数组为 nums = [3, 5, 2, 1, 6, 4] 一种输出方案为 [1, 6, 2, 5, 3, 4]实现...原创 2018-08-09 16:40:52 · 242 阅读 · 0 评论 -
lintcode练习-919. 会议室 II
描述给定一系列的会议时间间隔intervals,包括起始和结束时间[[s1,e1],[s2,e2],...] (si < ei),找到所需的最小的会议室数量。您在真实的面试中是否遇到过这个题? 是样例给出 intervals = [(0,30),(5,10),(15,20)], 返回 2."""Definition of Interval.class Interva...原创 2018-08-09 17:23:07 · 871 阅读 · 0 评论 -
lintcode练习- 362. 滑动窗口的最大值
描述给出一个可能包含重复的整数数组,和一个大小为 k 的滑动窗口, 从左到右在数组中滑动这个窗口,找到数组中每个窗口内的最大值。您在真实的面试中是否遇到过这个题? 是样例给出数组 [1,2,7,7,8], 滑动窗口大小为 k = 3. 返回 [7,7,8].解释:最开始,窗口的状态如下:[|1, 2 ,7| ,7 , 8], 最大值为 7;然后窗口向右移动一位:...原创 2018-08-10 10:48:55 · 243 阅读 · 0 评论 -
lintcode练习-360. 滑动窗口的中位数
描述给定一个包含 n 个整数的数组,和一个大小为 k 的滑动窗口,从左到右在数组中滑动这个窗口,找到数组中每个窗口内的中位数。(如果数组个数是偶数,则在该窗口排序数字后,返回第 N/2 个数字。)您在真实的面试中是否遇到过这个题? 是样例对于数组 [1,2,7,8,5], 滑动大小 k = 3 的窗口时,返回 [2,7,7]最初,窗口的数组是这样的:[ | 1,2,7 |...原创 2018-08-12 10:32:27 · 320 阅读 · 0 评论 -
lintcode练习- 219. 在排序链表中插入一个节点
描述在链表中插入一个节点。您在真实的面试中是否遇到过这个题? 是样例给出一个链表 1->4->6->8 和 val = 5.。插入后的结果为 1->4->5->6->8。实现代码:"""Definition of ListNodeclass ListNode(object): def __init__(self, ...原创 2018-08-12 11:01:14 · 975 阅读 · 2 评论 -
lintcode练习-225. 在链表中找节点
在链表中找值为 value 的节点,如果没有的话,返回空。样例给出 1->2->3 和 value = 3, 返回最后一个节点 last node.给出 1->2->3 和 value = 4, 返回空。实现代码:"""Definition of ListNodeclass ListNode(object): def __init__(se...原创 2018-08-12 11:07:16 · 421 阅读 · 0 评论 -
lintcode练习- 228. 链表的中点
找链表的中点。样例链表 1->2->3 的中点是 2。链表 1->2 的中点是 1。挑战如果链表是一个数据流,你可以不重新遍历链表的情况下得到中点么?实现代码:如果链表为空,或者链表长度为1,长度为2,都直接返回头结点。当链表长度为3时,返回第二个结点;当链表长度为4时,返回第二个结点;长度为5,返回第三个结点;。。。可以找到规律,链表长度每增长2,中...原创 2018-08-12 11:23:47 · 1238 阅读 · 0 评论 -
lintcode练习- 452. 删除链表中的元素
描述删除链表中等于给定值val的所有节点。您在真实的面试中是否遇到过这个题? 是样例给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5实现代码:定一个0结点,指向head,copy到pre。从head的首结点开始遍历,如果head.val == v...原创 2018-08-12 11:48:12 · 205 阅读 · 0 评论 -
lintcode练习 - 489. 数组化链表
描述将一个数组变成链表您在真实的面试中是否遇到过这个题? 是样例给出 [1,2,3,4], 返回 1->2->3->4->null 实现代码:"""Definition of ListNodeclass ListNode(object): def __init__(self, val, next=None): sel...原创 2018-08-12 14:45:39 · 210 阅读 · 0 评论 -
lintcode练习- 35. 翻转链表
描述翻转一个链表您在真实的面试中是否遇到过这个题? 是样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null挑战在原地一次翻转完成实现代码:时间复杂度O(n) , 额外空间复杂度为O(1)"""Definition of ListNodeclass ListNode(object):...原创 2018-08-12 14:51:56 · 212 阅读 · 0 评论 -
lintcode练习-96. 链表划分
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。 样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null 实现代码:定义两个链表,存储小于x,大于X的结点,...原创 2018-08-12 15:17:03 · 265 阅读 · 0 评论 -
lintcode练习- 112. 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null实现代码:注意对结尾特殊处理"""Definition of ListNod原创 2018-08-12 15:39:06 · 227 阅读 · 0 评论 -
lintcode练习-165. 合并两个排序链表
将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。实现代码:"""Definition of ListNodeclass ListNode(object): def __i原创 2018-08-13 12:02:30 · 205 阅读 · 0 评论 -
lintcode练习-166. 链表倒数第n个节点
找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.实现代码:两种思路:1、一次遍历,统计链表的长度count,如果count<n ,则越界,返回None。否则就计算n在正向的位置index= count-n,再一次遍历,找到index位置的结点。2...原创 2018-08-13 12:02:39 · 198 阅读 · 0 评论 -
lintcode练习-167. 链表求和
167. 链表求和你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null实现代码:思路:对两个链表全部遍历...原创 2018-08-13 12:02:45 · 264 阅读 · 0 评论 -
lintcode练习-173. 链表插入排序
173. 链表插入排序用插入排序对链表排序样例Given 1->3->2->0->null, return 0->1->2->3->null实现代码:"""Definition of ListNodeclass ListNode(object): def __init__(self, val, next=None):...原创 2018-08-13 12:02:51 · 149 阅读 · 0 评论 -
lintcode练习-174. 删除链表中倒数第n个节点
174. 删除链表中倒数第n个节点给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。 样例给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.挑战O(n)时间复杂度注意事项链表中的节点个数大于等于n实现代码:""...原创 2018-08-13 14:45:54 · 234 阅读 · 0 评论 -
lintcode练习-217. 无序链表的重复项删除
217. 无序链表的重复项删除设计一种方法,从无序链表中删除重复项。样例给出 1->3->2->1->4.返回 1->3->2->4挑战如果没有临时缓冲区,如何解决这一问题?实现代码:"""Definition of ListNodeclass ListNode(object): def __init__(sel...原创 2018-08-13 15:02:01 · 803 阅读 · 0 评论 -
lintcode练习-242. 将二叉树按照层级转化为链表
242. 将二叉树按照层级转化为链表给一棵二叉树,设计一个算法为每一层的节点建立一个链表。也就是说,如果一棵二叉树有D层,那么你需要创建D条链表。样例对于二叉树: 1 / \ 2 3 /4返回3条链表:[ 1->null, 2->3->null, 4->null] 实现代码:二叉树的层次遍历,每...原创 2018-08-13 15:14:27 · 808 阅读 · 0 评论 -
lintcode练习-372. Delete Node in a Linked List
372. Delete Node in a Linked List给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。样例Linked list is 1->2->3->4, and given node 3, delete the node in place 1->2->4实现代码:"""Defini...原创 2018-08-13 15:20:15 · 136 阅读 · 0 评论 -
lintcode练习- 451. 两两交换链表中的节点
451. 两两交换链表中的节点给一个链表,两两交换其中的节点,然后返回交换后的链表。样例给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。挑战你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 实现代码:"""Definition of ListNodecla...原创 2018-08-13 15:49:51 · 235 阅读 · 0 评论 -
lintcode练习-492. 队列维护
492. 队列维护实现一个队列的操作样例enqueue(1)enqueue(2)enqueue(3)dequeue() // return 1enqueue(4)dequeue() // return 2 实现代码:用数组和链表来实现'''#用数组来实现队列class MyQueue: def __init__(self): s...原创 2018-08-14 14:51:42 · 375 阅读 · 0 评论 -
lintcode练习-493. 维护队列 II
493. 维护队列 II实现一个双端队列样例push_front(1)push_back(2)pop_back() // return 2pop_back() // return 1push_back(3)push_back(4)pop_front() // return 3pop_front() // return 4 实现代码:'''#使用数组实现双...原创 2018-08-14 14:52:55 · 258 阅读 · 0 评论 -
lintcode练习-599. 向循环有序链表插入节点
599. 向循环有序链表插入节点给一个来自已经排过序的循环链表的节点,写一个函数来将一个值插入到循环链表中,并且保持还是有序循环链表。给出的节点可以是链表中的任意一个单节点。返回插入后的新链表。样例给一个链表:3->5->1插入值 4返回 5->1->3->4注意事项3->5->1 是一个循环链表,所以 3 是 1 的下一个节点。3...原创 2018-08-15 10:49:47 · 627 阅读 · 0 评论 -
lintcode练习-786. Linked List Weighted Sum In Reverse Order
786. Linked List Weighted Sum In Reverse OrderGiven a linked list, find the weighted sum in reverse order. The weight is the number of nodes up to the end of the queue.样例Given 3 -> 2 -> 5 ...原创 2018-08-15 10:50:00 · 177 阅读 · 0 评论 -
lintcode练习-36. 翻转链表 II
36. 翻转链表 II翻转链表中第m个节点到第n个节点的部分样例给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null挑战在原地一次翻转完成注意事项m,n满足1 ≤ m ≤ n ≤ 链表长度实现代码:"""Definition of L.原创 2018-08-15 10:50:10 · 268 阅读 · 0 评论 -
lintcode练习-48. 主元素 III
48. 主元素 III给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k。样例给出数组 [3,1,2,3,2,3,3,4,4,4] ,和 k = 3,返回 3挑战要求时间复杂度为O(n),空间复杂度为O(k)注意事项数组中只有唯一的主元素实现代码:class Solution: """ @param nums: A ...原创 2018-08-15 10:50:18 · 211 阅读 · 0 评论 -
lintcode练习-98. 链表排序
98. 链表排序在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。样例给出 1->3->2->null,给它排序变成 1->2->3->null.挑战分别用归并排序和快速排序做一遍。实现代码:"""Definition of ListNodeclass ListNode(object): def __...原创 2018-08-15 10:50:25 · 300 阅读 · 0 评论 -
lintcode练习-102. 带环链表
102. 带环链表给定一个链表,判断它是否有环。样例给出 -21->10->4->5, tail connects to node index 1,返回 true挑战不要使用额外的空间实现代码:思路:快慢指针的典型应用,使用快指针 fast 与慢指针 slow,slow每次后移一位,fast 每次后移两位,当fast 与 slow 指向同一节点时,...原创 2018-08-15 11:23:43 · 190 阅读 · 0 评论 -
lintcode练习-105. 复制带随机指针的链表
105. 复制带随机指针的链表给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点。返回一个深拷贝的链表。 挑战可否使用O(1)的空间实现代码:一个经典题目,思想就是在复制每个原节点链接其后,然后依次添加新节点的random指针。利用递归可以做到o(1)的空间复杂度"""Definition for singly-linked li...原创 2018-08-15 17:58:13 · 215 阅读 · 0 评论 -
lintcode练习-106. Convert Sorted List to Binary Search Tree
106. Convert Sorted List to Binary Search Tree给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树样例 21->2->3 => / \ 1 3 实现思路:如样例给出的一样,平衡二叉树要左右对齐,所以我们可以以中心结点为根结点,...原创 2018-08-16 07:43:34 · 179 阅读 · 0 评论 -
lintcode练习-113. 删除排序链表中的重复数字 II
113. 删除排序链表中的重复数字 II给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。样例给出 1->2->3->3->4->4->5->null,返回 1->2->5->null给出 1->1->1->2->3->null,返回 2->3-&原创 2018-08-16 07:43:44 · 241 阅读 · 0 评论 -
lintcode练习-170. 旋转链表
170. 旋转链表给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数样例给出链表1->2->3->4->5->null和k=2返回4->5->1->2->3->null实现思路:定义两个指针left和right,然后求出结点的真实移动位置,移动的部分放在left中,未移动的部分放在right中...原创 2018-08-16 07:44:05 · 243 阅读 · 0 评论