关闭

[置顶] 左程云《程序员代码面试指南》Python版(个人读书笔记)

说明  最近一直在读左神的书——《程序员代码面试指南—IT名企算法与数据结构题目最优解》,为了记录自己的学习成果,并且方便以后查看,将自己读书时的想法与使用python实现的代码记录在此博客。   博客还未更新完,持续更新中…栈和队列 设计一个有getMin功能的栈 由两个栈组成队列 如何仅用递归函数和栈操作逆序一个栈 用一个栈实现另一个栈的排序 生成窗口最大值数组 构造数组的MaxTree 求最...
阅读(268) 评论(0)

python连接mysql并让mysql支持中文

ubuntu下安装mysqlsudo apt-get install mysql-server sudo apt-get install mysql-client  在安装过程中会提示确认输入YES,设置 root 用户密码(之后也可以修改)等,稍等片刻便可安装成功。  之后可以使用如下命令打开mysql:sudo service mysql start mysql -u root -p #如...
阅读(233) 评论(0)

链表问题---在单链表中删除指定值的节点

【题目】  给定一个链表的头节点head和一个整数num,请实现函数将值为num的节点全部删除。【基本思路】  方法一。时间复杂度O(N),空间复杂度O(1)。  利用栈或者其他存储结构。将不等于num的节点收集起来,收集完成后再重新连接即可。代码实现如下:#python3.5 def removeValue1(head, num): if head == None: ret...
阅读(78) 评论(0)

链表问题---删除无序单链表中值重复出现的节点

【题目】  给定一个无序单链表的头节点head,删除其中值重复出现的节点。  请按以下要求实现两种方法。 方法一。时间复杂度O(N)。 方法二。空间复杂度O(1)。 【基本思路】  方法一。利用哈希表,依次遍历每一个节点,如果这个节点的值已经存在于哈希表中,将该节点删除;否则,将该节点的值添加到哈希表中。代码实现如下:#python3.5 def removeRepeatNode(head):...
阅读(59) 评论(0)

链表问题---将单链表的每K个节点之间逆序

【题目】  给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点,则不调整最后的节点。【基本思路】  方法一。时间复杂度O(N),空间复杂度O(K)。      利用栈结构,依次遍历链表,将节点压入栈中,栈中节点每凑到k个就将这k个节点进行逆序,然后再连接入链表中。需要注意头节点的更新以及每组节点两头的连接。代码实现如下:#python3.5 d...
阅读(55) 评论(0)

链表问题---两个单链表相交的一系列问题

【题目】  在本题中,单链表可能有环,也可能没环。给定两个单链表的头节点head1和head2,这两个单链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null即可。 要求,时间复杂度O(N+M),空间复杂度O(1)。【基本思路】  该问题可以分解成三个子问题:      问题一:如何判断一个链表是否有环,如果有的话返回第一个进环的节点,否...
阅读(346) 评论(0)

链表问题---两个单链表生成相加链表

【题目】假设链表中每一个节点的值都在0~9之间,那么链表整体就可以代表一个整数。 例如:9 -> 3 -> 7,可以代表整数937。 给定两个这种链表的头节点head1和head2,请生成代表两个整数相加值的结果链表。 例如:链表1为9 -> 3 -> 7,链表2为6 -> 3,最后生成新的结果链表为1 -> 0 -> 0 -> 0。【基本思路】  容易想到的方法是先将两个链表的值表示出来,然...
阅读(21) 评论(0)

链表问题---复制含有随机指针节点的链表

【题目】  一种特殊的链表节点类型描述如下:class Node: def __init__(self, data): self.val = data self.next = None self.rand = None  Node类中的value是节点值,next指针和正常单链表中next指针的意义一样,都指向下一个节点,rand指针是Node...
阅读(22) 评论(0)

链表问题---将单向链表按某值划分成左边小,中间相等,右边大的形式

【题目】  给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于pivot的节点。除这个要求外,对调整后的节点顺序没有更多的要求。【进阶题目】  在原问题的要求之上再增加如下两个要求: 在左、中、右三个部分的内部也做顺序要求,要求每部分里的节点从左到右...
阅读(62) 评论(0)

链表问题---判断一个链表是否为回文结构

【题目】  给定一个链表的头节点head,请判断该链表是否为回文结构。   进阶:如果链表长度为N,要求时间复杂度O(N),空间复杂度O(1)。【基本思路】  方法一。时间复杂度O(N),空间复杂度O(N)。      使用栈,遍历一遍链表把每个节点都压入栈中,这样在弹出栈的时候,所有的节点就逆序了。依次对比原链表的每个节点即可。#python3.5 def isPalindrome1(hea...
阅读(60) 评论(0)

其他题目---邮局选址问题

【题目】  一条直线上有居民点,邮局只能建在居民点上。给定一个有序整型数组arr,每个值表示居民点的一维坐标,再给定一个正数num,表示邮局数量。选择num个居民点建立num个邮局,使得所有的居民点到邮局的总距离最短,返回最短的总距离。【基本思路】  方法一。动态规划。首先解决一个问题,如果在arr[0…j]上只能建立一个邮局,最短总距离是多少?如果居民点有奇数个,邮局建在最中间的那个居民点可以使总...
阅读(25) 评论(0)

其他题目---画匠问题

【题目】  给定一个整型数组arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再给定一个正数num表示画匠的数量,每个画匠只能画连在一起的画作。所有的画匠并行工作,请返回完成所有的画作需要的最少时间。【基本思路】  方法一。如果画匠的数量大于画作的数量,每个人完成一幅画就是最优解,即返回arr中的最大值。如果只有一个画匠,那么对于这个画匠来说,arr[0…j]上的画作最少时间就是arr[0...
阅读(16) 评论(0)

其他题目---丢棋子问题

【题目】  一座大楼有0~N层,地面算作第0层,最高的一层为第N层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会摔碎(1≤i≤N1\le i\le N)。给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层,即使在最差的情况下扔的最少次数。一次只能扔一个棋子。【基本思路】  方法一。递归。假设递归函数P(N, K)的返回值是N层楼有K个棋子在最差情...
阅读(62) 评论(0)

图解 Python 深拷贝和浅拷贝

Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。下面本文就通过简单的例子介绍一下这些概念之间的差别。对象赋值直接看一段代码:wilber = will print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [i...
阅读(86) 评论(0)

其他题目---Manacher算法

【题目】  给定一个字符串str,返回str中最长回文子串的长度。要求时间复杂度O(N)。【进阶题目】  给定一个字符串str,想通过添加字符的方式使得str整体都变成回文字符串,但要求只能在str的末尾添加字符,请返回在str后面添加的最短字符串。要求时间复杂度O(n)。【代码实现】#python3.5 #原问题 def manacherString(string): res = [0 f...
阅读(60) 评论(0)

其他题目---KMP算法

【题目】  给定两个字符串str和match,长度分别为N和M。实现一个算法,如果字符串str中含有子串match,则返回match在str中的开始位置,不含有则返回-1。【代码实现】#python3.5 def getIndexOf(strS, strM): def getNextArray(str1): if len(str1) == 1: ret...
阅读(57) 评论(0)

其他题目---出现次数的TopK问题

【题目】  给定String类型的数组strArr,再给定整数k,请严格按照排名顺序打印出现次数前k名的字符串。要求时间复杂度O(Nlogk)。【进阶题目】  设计并实现TopKRecord结构,可以不断地向其中加入字符串,并且可以根据字符串出现的情况随时打印加入次数最多的前k个字符串,具体为:  1.k在TopKRecord实例生成时指定,并且不再变化(k是构造函数的参数)。    2.含有ad...
阅读(18) 评论(0)

其他题目---两个有序数组间相加和的TopK问题

【题目】  给定两个有序数组arr1和arr2,再给定一个整数k,返回来自arr1和arr2的两个数相加和最大的前k个,两个数必须分别来自两个数组。要求时间复杂度O(klogk)。【基本思路】  使用大根堆结构。假设arr1的长度是M,arr2的长度是N。因为是排序数组,arr1中最后一个数加上arr2中最后一个数一定就是最大的相加和。将这个数压入大根堆中。然后从大根堆中弹出一个堆顶,此时这个堆顶一...
阅读(19) 评论(0)

其他题目---在两个排序数组中找到第K小的数

【题目】  给定两个有序数组arr1和arr2,再给定一个整数k,返回所有的数中第k小的数。要求时间复杂度O(log(min{M,N})),额外空间复杂度O(1)。【基本思路】  在解决这道题之前,先解决一个小问题:在两个长度相等的排序数组中找到上中位数。本题也深度利用了这个问题的解法。以下的getUpMedian方法的功能就是,在a1[s1…e1]和a2[s2…e2]两段长度相等的范围上找上中位数...
阅读(44) 评论(0)

其他题目---在两个长度相等的排序数组中找到上中位数

【题目】  给定两个有序数组arr1和arr2,已知两个数组的长度都为N,求两个数组中所有数的上中位数。要求时间复杂度O(logN),空间复杂度O(1)。【基本思路】  看到时间复杂度为O(logN),很容易想到二分查找。过程如下: 如果每个数组中只有一个元素,较小的那个元素就是整体的上中位数,如果两个元素相等,随便返回哪个都可以。 如果数组中不止一个元素,找到两个数组的中间位置mid1和mid2。...
阅读(55) 评论(0)

其他题目---随时找到数据流的中位数

【题目】  有一个源源不断地吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。【要求】 如果MedianHolder已经保存了吐出的N个数,那么任意时刻将一个新数加入到MedianHolder的过程,其时间复杂度O(logN)。 取得已经吐出的N个数整体的中位数的过程,时间复杂度O(1)。 【...
阅读(105) 评论(0)
165条 共9页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:15615次
    • 积分:1996
    • 等级:
    • 排名:第19820名
    • 原创:161篇
    • 转载:4篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论