lintcode
喵咖
修炼程序员的九阴真经
展开
-
Lintcode 删除链表中倒数第k个结点
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例 给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.挑战 O(n)时间复杂度要考虑的测试用例情况(len表示链表长度): 1. n>len, 2. 要删除的结点是头节点或只有一个结点(只有一个结点要特殊处理,因为没有前驱也没有后继) 3. 要删除原创 2016-04-12 16:59:50 · 642 阅读 · 0 评论 -
Lintcode 带最小值的栈
带最小值操作的栈描述 笔记 数据 评测 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。您在真实的面试中是否遇到过这个题? Yes 注意事项如果堆栈中没有数字则不能进行min方法的调用样例 如下操作:push(1),pop(),push(2),push(3),min(),原创 2016-04-18 21:19:03 · 658 阅读 · 0 评论 -
Lintcode 将二叉查找树转换为双链表
将二叉查找树转换成双链表描述 笔记 数据 评测 将一个二叉查找树按照中序遍历转换成双向链表。您在真实的面试中是否遇到过这个题? Yes 样例 给定一个二叉查找树:4/ \ 2 5 / \ 1 3 返回 1<->2<->3<->4<->5。想法:没有要求原地拆分二叉树,所以可以在中序遍历的过程中一遍按中序访问节点,一边生成链表节点,最后返回头节点。/** *原创 2016-04-18 16:23:54 · 591 阅读 · 0 评论 -
Lintcode 二叉树后序遍历 非递归形式
给出一棵二叉树,返回其节点值的后序遍历。您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵二叉树 {1,#,2,3},1 \ 2 / 3 返回 [3,2,1]挑战 你能使用非递归实现么?都要采用栈,一种更简便的思想是:后序遍历,左节点先于右结点先于根节点被访问,因此,根先入栈,出栈时访问节点。若当前栈顶结点没有左孩子和右孩子或者左孩子节点和右孩原创 2016-04-18 16:14:40 · 3218 阅读 · 1 评论 -
Lintcode 二叉树的路径和
给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。您在真实的面试中是否遇到过这个题? Yes 样例 给定一个二叉树,和 目标值 = 5:1 / \ 2 4 / \ 2 3 返回:[ [1, 2, 2], [1, 4] ]结点值和sum都可能是负数/** * Definition原创 2016-04-16 14:57:43 · 863 阅读 · 0 评论 -
Lintcode 用递归打印从1到N位的最大整数
题目要求用递归打印从1到N位的最大整数(十进制),如n=2 返回[1,2,…99]. 实际上这道题是想让我们用全排列的思想分别按位进行递归,每位有0-9这十种可能。然而当用python写的时候不好用string类型存储数字,因为字符串不可改变。而用list存储数字的时候是酱紫的[1,9],对应数字19.然后还要对这个再进行处理。 所以干脆用最简单的数字,递增递归。(这样栈会爆,因为这是一个大数问原创 2016-03-28 15:44:15 · 1883 阅读 · 0 评论 -
lintcode 空格替换
设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。你的程序还需要返回被替换后的字符串的长度。 对于字符串”Mr John Smith”, 长度为 13替换空格之后的结果为”Mr%20John%20Smith”class Solution {public: /** * @param string:原创 2016-03-17 20:32:53 · 551 阅读 · 0 评论 -
Lintcode 用栈实现队列
用栈实现队列 正如标题所述,你需要使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。pop和top方法都应该返回第一个元素的值。开始直观的想法: ` class Queue { public: stack stack1; stack stack2;Queue() { /原创 2016-03-18 19:52:59 · 326 阅读 · 0 评论 -
lintcode 求最长公共子串
给出两个字符串,找到最长公共子串,并返回其长度。 这个其实比较简单,因为只要返回最长公共子串的长度就可以了,不用找出他们。PS:如果要是要求返回最长公共子串呢? 动态规划,最优子结构if s[i] == t[j], L[i,j] = L[i-1,j-1]+1 if s[i]!=t[j] L[i,j] = 0, 这里是区别于最长公共子序列的,因为L[i,j] 代表以i结尾的s[i]和以j结尾的原创 2016-03-21 19:21:51 · 470 阅读 · 0 评论 -
lintcode 前序序列和中序序列构建二叉树
根据前序遍历和中序遍历树构造二叉树. 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \ 1 3"""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.left, sel原创 2016-03-21 20:12:59 · 655 阅读 · 2 评论 -
Lintcode 合并两个排序的链表
将两个排序链表合并为一个新的排序链表 样例 给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。 递归实现:"""Definition of ListNodeclass ListNode(object): def __init__(self, val, next=None): self.val原创 2016-03-27 18:56:06 · 407 阅读 · 0 评论 -
lintcode 旋转数组的最小数字
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。数组中可能存在重复的元素。想法:二分查找变形,最小数字一定是最大值后面的那个。当[11101],[1,0,1,1,1]时没办法判断,顺序查找。 class Solution { public: /** * @param num: the原创 2016-03-18 11:22:02 · 371 阅读 · 0 评论 -
32位整数的二进制表示中有多少个1
思路1:def countOnes(self, num): # write your code here if num < -2147483648 or num > 2147483647: return None count = 0 while num: if num%2 == 1:原创 2016-03-17 16:24:00 · 4957 阅读 · 0 评论 -
Lintcode 用递归打印数字
用递归的方法找到从1到最大的N位整数。 注意事项用下面这种方式去递归其实很容易:recursion(i) { if i > largest number: return results.add(i) recursion(i + 1) } 但是这种方式会耗费很多的递归空间,导致堆栈溢出。你能够用其他的方式来递归使得递归的深度最多只有 N 层么?原创 2016-04-12 21:46:44 · 706 阅读 · 0 评论 -
二叉树的层次遍历
二叉树的层次遍历描述 笔记 数据 评测 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? Yes 样例 给一棵二叉树 {3,9,20,#,#,15,7} :3 / \ 9 20 / \ 15 7 返回他的分层遍历结果:[ [3], [9,20], [15,7] ]结果要保存在二维vector中原创 2016-04-18 21:22:30 · 324 阅读 · 0 评论