剑指offer

http://blog.csdn.net/DERRANTCM/article/details/46887821
目录

第01-10题

【剑指Offer学习】【面试题02:实现Singleton 模式——七种实现方式】

【剑指Offer学习】【面试题03:二维数组中的查找】

每行递增,每列递增(注意是每列,不是第一列):先指针指向右上角元素,如果>target: 列 = 列-1 (j = j-1)
如果< target ,行(i = i-1)

【剑指Offer学习】【面试题04:替换空格】

先遍历一遍看有多少个空格需要替换,后面增加相应的空格,然后从后往前双指针填补空白

【剑指Offer学习】【面试题05:从尾到头打印链表】

用栈,再出栈

【剑指Offer学习】【面试题06:重建二叉树】

参考leetcode,二叉树里面

【剑指Offer学习】【面试题07:用两个栈实现队列】

【剑指Offer学习】【面试题08:旋转数组的最小数字】

二分查找 O(logN)

【剑指Offer学习】【面试题09:斐波那契数列】
dp ,标准递推,dp[0]=0,dp[1]=1, dp[i] = dp[i-1] + dp[i-2]

【剑指Offer学习】【面试题10:二进制中1 的个数】

第11-20题

【剑指Offer学习】【面试题11:数值的整数次方】

【剑指Offer学习】【面试题12:打印1 到最大的n 位数】

【剑指Offer学习】【面试题13:在O(1)时间删除链表结点】

【剑指Offer学习】【面试题14:调整数组顺序使奇数位于偶数前面】

简化版的快排,两层while,相当于快排里的每次迭代,双指针,碰到符合要求的pair进行交换

【剑指Offer学习】【面试题15:链表中倒数第k个结点】

快慢指针

【剑指Offer学习】【面试题16:反转链表】

非递归 tail = None
while head:
  new  = head.next
  head.next = tail
  tail = head  
  head = new
return tail

【剑指Offer学习】【面试题17:合并两个排序的链表】

和归并差不多

【剑指Offer学习】【面试题18:树的子结构】

写一个方法判断两个树是否match(递归,判断当前节点与左右节点)
另一个方法遍历树A,对于树A的每个节点,如果值和B的根节点值一样,去调用match方法,当match为True,则返回

【剑指Offer学习】【面试题19:二叉树的镜像】

和leetcode226. Invert Binary Tree 一样,node不为空,则交换左右,然后对左右调用同样的方法
class Solution(object):
    def invertTree(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        if not root:
            return 
        root.left,root.right = root.right,root.left
        if root.left:
            self.invertTree(root.left)
        if root.right:
            self.invertTree(root.right)
        
        return root

【剑指Offer学习】【面试题20:顺时针打印矩阵】

第21-30题

【剑指Offer学习】【面试题21:包含min函数的钱】

【剑指Offer学习】【面试题22:栈的压入、弹出序列】

【剑指Offer学习】【面试题23:从上往下打印二叉树】

层次遍历
使用队列

【剑指Offer学习】【面试题24:二叉搜索树的后序遍历序列】

【剑指Offer学习】【面试题25:二叉树中和为某一值的路径】

DFS,保存所有和为target的path
返回条件为到叶子节点(左右都NULL)

class Solution(object):
    def pathSum(self, root, sum):
        if root is None or sum is None:
            return []
        
        path = [root.val]
        
        res = []
        self.dfs(root,path,sum - root.val,res)
        return res
    
    def dfs(self,root,path,target,res):
        if not root.left and not root.right:
            if target == 0:
                res.append(path)
        
        if root.left is not None:
                self.dfs(root.left,path+[root.left.val],target - root.left.val,res)
        if root.right is not None:
                self.dfs(root.right,path + [root.right.val],target - root.right.val,res)

【剑指Offer学习】【面试题26:复杂链表的复制】

【剑指Offer学习】【面试题27:二叉搜索树与双向链表】

【剑指Offer学习】【面试题28:字符串的排列】

全排列,个人感觉DFS最简洁

【剑指Offer学习】【面试题29:数组中出现次数超过一半的数字】

一个元素保存当前str,一个保存当前次数c
如果碰到一样的元素 c+1,否则c -1,如果c<0则str替换成当前的数字,最终的str肯定是超过一半的哪一个

【剑指Offer学习】【面试题30:最小的k个数】

堆排序,前k个数先整成最大堆,之后nums[k+1:]每个数和最大堆堆顶进行比较,
如果 <堆顶 则替换掉堆顶的元素,再整堆 复杂度k*log(k) + (N-k)*log(k) =  N*log(k)

第31-40题

【剑指Offer学习】【面试题31:连续子数组的最大和】

基础DP 
            cur_max = max(nums[i],cur_max+nums[i])
            tmp_max = max(cur_max,tmp_max)

【剑指Offer学习】【面试题32:求从1到n的整数中1出现的次数】

【剑指Offer学习】【面试题33:把数组排成最小的数】

【剑指Offer学习】【面试题34:丑数】

【剑指Offer学习】【面试题35:第一个只出现一次的字符】
字典遍历一遍,value存count,再遍历一遍,碰到第一个value == 1的字符,时间o(N),空间o(N)

【剑指Offer学习】【面试题36:数组中的逆序对】

归并排序,完全一样的代码,归并过程中判断left 和right有没有逆序对,逆序对count + (len(left) - i)   if right[j] < left[i]

【剑指Offer学习】【面试题37:两个链表的第一个公共结点】

一个函数计算长度,长度差为diff
标记两个链表为long和short,long先走diff步
long和short一起往前走,直到long == short

【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】

二分查找,找到后双指针前后扫,平均O(logN),最坏O(N)
或者二分查找,找到后继续查找开头和结尾位置,平均O(logN)

【剑指Offer学习】【面试题39:二叉树的深度】

return max(depth(left) + depth(right)) + 1

【剑指Offer学习】【面试题40:数组中只出现一次的数字】

第41-50题

【剑指Offer学习】【面试题41:和为s 的两个数字vs 和为s 的连续正数序列】

第一题: 2 SUMS
第二题: 相当于双指针,起始[1,2],分别为开头left和结尾right,如果和小于s则结尾right+1,如果和大于s则开头left + 1
一种实现:直接while True,当最后path出现两个均大于 target一半 target //2的元素时break

def foo(target):
    path = [1,2]
    while True:
        if len(path) == 2 and path[0] > target // 2 and path[1] > target//2:
            break
        s = sum(path)
        # print(path)
        if s == target:
            res.append(path[:]) # 注意这里添加path[:] 避免浅拷贝
            path.append(path[-1]+1)
        elif s < target:
            path.append(path[-1]+1)
        else:
            path.pop(0)
    print(res)
    
    
foo(15)  

【剑指Offer学习】【面试题42:翻转单词顺序vs左旋转字符串】

【剑指Offer学习】【面试题43 : n 个锻子的点数】

【剑指Offer学习】【面试题44:扑克牌的顺子】

【剑指Offer学习】【面试题45:圆圈中最后剩下的数字(约瑟夫环问题)】

【剑指Offer学习】【面试题47:不用加减乘除做加法】

【剑指Offer学习】【面试题49:把字符串转换成整数】

【剑指Offer学习】【面试题50:树中两个结点的最低公共祖先】

第51-60题

【剑指Offer学习】【面试题51:数组中重复的数字】

【剑指Offer学习】【面试题52:构建乘积数组】

【剑指Offer学习】【面试题53:正则表达式匹配】

【剑指Offer学习】【面试题54:表示数值的字符串】

【剑指Offer学习】【面试题55:字符流中第一个不重复的字符】

【剑指Offer学习】【面试题56:链表中环的入口结点】

【剑指Offer学习】【面试题57:删除链表中重复的结点】

【剑指Offer学习】【面试题58:二叉树的下一个结点】

【剑指Offer学习】【面试题59:对称的二叉树】

【剑指Offer学习】【面试题60:把二叉树打印出多行】

第61-67题

【剑指Offer学习】【面试题61:按之字形顺序打印二叉树】

【剑指Offer学习】【面试题62:序列化二叉树】

【剑指Offer学习】【面试题63:二叉搜索树的第k个结点】

【剑指Offer学习】【面试题64:数据流中的中位数】

【剑指Offer学习】【面试题65:滑动窗口的最大值】

【剑指Offer学习】【面试题66:矩阵中的路径】

【剑指Offer学习】【面试题67:机器人的运动范围】

特别声明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容