
Python刷题
slibra_L
Data mining g g g g g...
展开
-
python实现单链表,及两个链表按位相加
leetcode上一道链表题: You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numb原创 2017-09-24 13:14:14 · 1881 阅读 · 0 评论 -
17合并两个有序链表PYTHON
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路:构造一个新链表,将两个链表比较大小,将较小的值插入新链表中,使用递归# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next原创 2017-10-08 21:57:15 · 1617 阅读 · 0 评论 -
18判断B是否为A数的子结构python
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路: 1、HasSubtree使用递归遍历A树,在A中查找与B根节点值一样的节点R,若根节点不等,则向左子树、右子树找与B根节点相等的节点 2、若找到A中与B根节点相等的节点R,则调用DoesTree1HaveTree2,使用递归判断R和B子树是不是具有相同的值,终止条件是到达R或者B的叶子节点原创 2017-10-09 17:52:50 · 1161 阅读 · 0 评论 -
20顺时针打印矩阵python
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.原创 2017-10-09 19:04:37 · 1946 阅读 · 1 评论 -
9斐波那契数列PYTHON
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 思路:不用递归的方法 1、判定n等于0或1时的输出 2、将一次迭代的结果ans赋给num2,之前的num2赋给num1 这种方法的时间复杂度为o(n)# -*- coding:utf-8 -*-class Solution: def Fibonacci(self, n):原创 2017-10-02 09:22:04 · 439 阅读 · 0 评论 -
10二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 :按位和1做与运算,如果结果为1则计数,为0则跳过,>>为右移,但此方法不适合输入为负数class Solution: def NumberOf1(self, n): # write code here count = 0 while(n):原创 2017-10-02 11:16:54 · 443 阅读 · 0 评论 -
11数值的整数次方python
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路:考虑到exponent小于0、等于0、大于0的情况class Solution: def Power(self, base, exponent): # write code here ans = 1 if exponen原创 2017-10-02 14:17:58 · 877 阅读 · 0 评论 -
12打印1到最大的n位数python***
题目:打印1到最大的n位数,如n=3时打印1到999 思路:求出最大的n位数,然后依次打印,但当n十分大事会出问题n = 2num = 1for i in range(n): num = num*10for i in range(1,num): print i一个更完善的思路: 字符串,全排列递归输出,略复杂。。。。def Print1ToMaxOfNDigits2(n):原创 2017-10-02 15:01:41 · 2027 阅读 · 0 评论 -
13在O(1)时间内删除链表结点python
题目:在O(1)时间内删除链表结点 普通思路:通过遍历找到将要删除的节点前一位,然后删除节点,这样时间复杂度为o(n) 进阶思路: 1、判断要删除的节点后是否有节点,若有节点,则将该节点内容复制到要删除的节点,并删除该节点 2、若链表中只有一个节点,则删除该节点 3、若要删除的节点后面没有节点(即该节点为最后一个),则遍历到该节点前一位并删除该节点class ListNode: d原创 2017-10-02 18:36:55 · 1040 阅读 · 1 评论 -
14调整数组顺序使奇数位于偶数前面python
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 基本思路:遍历数组,遇到偶数便把他放到最后,时间复杂度o(n^2) 进阶思路:如同快速排序的方法,设置首尾两个指针,若P1指向偶数,P2指向奇数,则交换P1、P2顺序 无需开辟新空间,运行结果为奇数在前偶数在后,原创 2017-10-02 19:04:49 · 1738 阅读 · 0 评论 -
24二叉搜索树的后序遍历python
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出True否则输出False。假设输入的数组的任意两个数字都互不相同。 思路:1、判断输入为空、二叉树只有左子树、二叉树只有右子树的情况 2、使用index分割左右子树 3、使用递归判断左右子树是否为后序遍历class Solution: def VerifySquenceOfBST(self, seque原创 2017-10-23 09:34:22 · 1137 阅读 · 0 评论 -
21包含min函数的栈python
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 思路:设置一个辅助栈来保存最小值,每次在原始栈压入元素的时候同时更新辅助栈class Solution: def __init__(self): self.stack = [] self.min_stack = [] def push(self, node):原创 2017-10-17 14:46:33 · 1023 阅读 · 0 评论 -
22栈的弹出序列是否正确python
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 思路:设置一个辅助栈模仿栈的压入弹出,若弹出序列正确,则在程序结束时辅助栈应为空class S原创 2017-10-17 15:23:21 · 326 阅读 · 0 评论 -
23从上往下打印二叉树python
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路:用一个临时数组存储需要打印的节点,如打印8时,将6和10存入临时数组class Solution: # 返回从上到下每个节点值列表,例:[1,2,3] def PrintFromTopToBottom(self, root): # 设置答案集合ans 临时数组temp,使用temp存储需要打印的原创 2017-10-17 16:17:54 · 956 阅读 · 0 评论 -
16反转链表python
题目:输入一个链表,反转链表后,返回头结点 思路:先把下一个节点保存之后,将所有节点指向前一个节点# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回ListNod原创 2017-10-08 20:21:23 · 379 阅读 · 0 评论 -
15链表中倒数第K个节点python
题目:输入一个链表,输出该链表中倒数第k个结点。 基本思路:遍历一次链表获得链表长度,再次遍历链表,至n-k+1出输出 # -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: d原创 2017-10-08 18:57:00 · 1937 阅读 · 0 评论 -
39平衡二叉树判断python
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。若左右子树深度差不超过1则为一颗平衡二叉树。 思路:1、使用获取二叉树深度的方法来获取左右子树的深度 2、左右深度相减,若大于1返回False 3、通过递归对每个节点进行判断,若全部均未返回False,则返回True# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self原创 2017-10-08 11:07:48 · 2751 阅读 · 0 评论 -
快速排序PYTHON
最近一直在复习数据结构,把常用的的算法使用python实现, 快速排序号称时间复杂度最低的排序算法,平均复杂度o(nlogn) 思路:1、将第一个元素设为枢轴pivot,将整个数组分为两部分,左边比pivot小,右边比pivot大 2、对左右两部分分别递归def partition(l,low,high): pivotkey = l[low] while low < high:原创 2017-09-25 15:05:09 · 266 阅读 · 0 评论 -
归并排序python
归并排序主要是分治和递归的思想: 首先用二分法将整个数组分割成很多小块 然后合并每个小块,将较小的元素拍到前面def merge(a, b): c = [] i = j = 0 while i < len(a) and j < len(b): #从中线两边归并,比较大小那个小就把那个元素放在tr[k]中 if a[i] < b[j]:原创 2017-09-25 19:59:02 · 315 阅读 · 0 评论 -
19翻转二叉树python
二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9原创 2017-09-26 09:26:27 · 646 阅读 · 0 评论 -
2单例模式python
单例模式:是只能生成一个实例的类 import方法 python中的模块module在程序中只被加载一次,本身就是单例的 可以直接写一个模块,将你需要的方法和属性,写在模块中当做函数和模块作用域的全局变量即可,根本不需要写类。# mysingleton.py# class My_Singleton(object):# def foo(self):# pass#原创 2017-09-26 10:55:12 · 295 阅读 · 0 评论 -
3二维数组查找python
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路:1、从右上角开始 2、如果该元素大于target,则向左移一位 3、如果该元素小于target,则向下移一位 # -*- coding:utf-8 -*-class Solution: # array 二维列表原创 2017-09-26 11:21:57 · 614 阅读 · 0 评论 -
4替换空格python
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy 书中思路:1、统计字符串中空格的个数 2、利用指针插入字符串# -*- coding:utf-8 -*-class Solution: # s 源字符串 # 创建新的字符串进行替换 def replaceSpace1(s原创 2017-09-26 12:29:20 · 421 阅读 · 0 评论 -
5从尾到头打印链表python
输入一个链表,从尾到头打印链表每个节点的值。 思路:1、设置一个空数组 2、从头到尾遍历链表,将值插入空数组的首位# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返原创 2017-09-26 12:52:22 · 399 阅读 · 0 评论 -
6重建二叉树python
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路:1、从前序遍历中找到根节点,并找到根节点在中序遍历的下标i 2、按照i的值分割前序和中序 3、递归1~2# -*- coding:utf-8 -*-#原创 2017-09-26 15:14:19 · 329 阅读 · 0 评论 -
7用两个栈实现队列python
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:1、用一个栈实现进队,另一个栈实现出队 2、需要进队的时候把元素压如stack1中,需要出队的时候把stack1中的元素全部弹出至stack2中 3、从stack2中出队,即可实现先进先出# -*- coding:utf-8 -*-class Solution: def __init__(se原创 2017-09-26 16:03:44 · 803 阅读 · 1 评论 -
8旋转数组最小数字PYTHON
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路:使用二分查找 1、设置一个首部指针low,一个尾部指针high,以及一个最小值初始值minVal 2、求出中间原创 2017-09-26 21:11:09 · 812 阅读 · 0 评论 -
python在线笔试输入输出格式
最近参加了不少公司的在线笔试,发现编程的时候经常会遇到这样的情况: 1、从控制台输入若干数字,并以空格分隔 2、输出结果为以空格分隔的字符串 为了方便答题,自己写了一个调整输入输出格式的小程序,这样以后答题的时候就不用把时间浪费在调整输入输出上了def in_put(): num = raw_input() num2 = num.split(' ') for i in原创 2017-09-11 16:23:41 · 4701 阅读 · 2 评论 -
KMP算法(Python实现)
本篇文章是对Kmp用Python进行了实现。1.时间复杂度分析BF算法的时间复杂度:在最坏的情况下,BF算法要将目标串的每一个字符同模式串进行比较一遍,假定目标串长度为m,模式串长度为n,总的时间复杂度为O(m*n)。而对于KMP算法,进行比较的时间复杂度为O(m+n),求next数组的时间复杂度为n,总体时间复杂度为O(m+2n)。2.源代码源代码介绍:BF_Match为常规的模式匹配算法,KMP转载 2017-09-11 16:33:27 · 399 阅读 · 0 评论 -
39二叉树的深度python
题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路:利用递归的方法,比较每个节点左子树和右子树子节点的大小,返回较大的值# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x#原创 2017-10-08 09:17:54 · 526 阅读 · 0 评论