数据结构
空城gang
大起大落谁都有,拍拍灰尘继续走!
人生,一半清醒,一半释然。
展开
-
中铁笔试题 火车空闲座位问题
题目如下:代码如下:import sysline1 = sys.stdin.readline().strip()W,M = list(map(int, line1.split()))arr=[]N=0for k in range(W): N+=karr=[]for i in range(N): arr.append(list(map(int,(sys.stdin.readline().strip().split()))))#print(arr)pr..原创 2020-06-12 16:08:59 · 748 阅读 · 0 评论 -
红黑树
二叉查找树概念:1.左子树上所有结点的值均小于或等于它的根结点的值。2.右子树上所有结点的值均大于或等于它的根结点的值。3.左、右子树也分别为二叉排序树。下图为二叉查找树红黑树的概念:它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特点:1.每个节点是黑色或者红色。2.根节点是黑色。3.每个叶子节点是黑色。4.如果一个节点是红色的,则它的子节点必须是黑色的。5.从一个节点到该节点的子孙.原创 2020-05-30 14:08:42 · 147 阅读 · 0 评论 -
数据结构中B树和B+树的区别
转载链接:https://msd.misuland.com/pd/2884250171976189524B树和B+树数据结构及使用场景1.出现的原因 我们已经知道他们两是mysql索引的数据结构,为什么要使用这种数据结构呢?我们知道内存读取效率远远高于磁盘IO的效率,当数据量大而不能完全存放于内存时,只能依靠磁盘了,一次存放于磁盘页中,每个磁盘页对应一个树的节点。也就是说只要我们能减少磁盘IO的次数,那么查询效率就会显著提高。如何减少?B树就是通过降低树的深度,将二叉树的“瘦高”变成“矮胖转载 2020-05-25 22:32:55 · 863 阅读 · 0 评论 -
二叉树
1.二叉树概念2 二叉树的特点1)树执行查找、删除、插入的时间复杂度都是O(logN)2)遍历二叉树的方法包括前序、中序、后序3)非平衡树指的是根的左右两边的子节点的数量不一致4) 在非空二叉树中,第i层的结点总数不超过 , i>=1;5)深度为h的二叉树最多有(2的n次方-1)个结点(h>=1),最少有h个结点;6)对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;...原创 2020-05-22 20:49:38 · 258 阅读 · 0 评论 -
合并两个有序链表 Python (第一版:.完整的代码包括输入输出在pycharm,第二版:LeetCode代码)
第一版:.完整的代码包括输入输出#链表中结束后记得返回一个指向头结点的指针# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x self.next = Noneclass LinkList: def __init__...原创 2019-08-16 17:53:26 · 1025 阅读 · 0 评论 -
Python 单链表的初始化、赋值、输出
1.定义一个结点类val next class ListNode: def __init__(self, x): self.val = x self.next = None2.定义单链表 :(单链表是由一个一个结点构成)在结点类的基础上class LinkList:#新建一个头指针为空的链表 def __init__(s...原创 2019-08-16 17:43:51 · 15122 阅读 · 1 评论 -
中兴 2019 算法笔试 (员工工资按频数排序输出)
图片由网上提供仅供参考:1.本地测试代码:def sortsalary(lis): dict={} for i in range(len(lis)): if lis[i] not in dict: dict[lis[i]] = 0 if lis[i] in dict: dict[lis...原创 2019-08-25 12:46:35 · 1153 阅读 · 0 评论 -
X的平方根 Python实现
class Solution(object): def mySqrt(self, x): """ :type x: int :rtype: int """ 具体过程:类似二分查找 #left=0 right=5 mid=2 mid*mid=4 <5 #left=3 right=5...原创 2019-08-15 18:01:36 · 489 阅读 · 0 评论 -
Z 字形变换 python实现
解题思路:我们可以 1.设置一个列表:列数为 numRows 和字符串长度的最小值 2.我们可以发现一个规律:就是row=0 和row=numRows -1 时都会改变方向 -1或者+1 操作 3.设置一个改变方向的变量flag 当row=0 和row=numRows -1 是就改变flag #设置标志位,碰到第0或者第numsRows-1行,就...原创 2019-08-15 17:26:20 · 886 阅读 · 0 评论 -
剑指offer第3题 查找数组中的重复数字 Python实现(两种方法:哈希表解决 数组下标匹配解决)
#查找数组中的重复数字 题目:长度为n的数组,所有数字都在0到n-1范围内#方法一:查找到一个重复的即可(哈希表解决,Python里的字典)def findsamenum1(m): dict={} for i in range(len(m)): if m[i] not in dict: dict[m[i]]=i el...原创 2019-08-22 11:56:03 · 270 阅读 · 0 评论 -
MySQL的btree索引和hash索引的区别
MySQL的btree索引和hash索引的区别Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。可 能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tre...转载 2019-08-30 11:38:00 · 81 阅读 · 0 评论 -
剑指offer 从尾到头打印链表 python实现
方法一:stack[::-1]class Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): stack=[] p=listNode while(p): stack.append(p.val)...原创 2019-09-14 15:44:46 · 143 阅读 · 0 评论 -
剑指offer 重建二叉树 python实现
def reConstructBinaryTree(self, pre, tin): # write code here if len(pre)==0 or len(tin)==0:return None root=pre[0] flag=tin.index(pre[0]) n=TreeNode(root) ...原创 2019-09-14 17:04:25 · 124 阅读 · 0 评论 -
剑指offer 用两个栈实现一个队列 python实现
# -*- coding:utf-8 -*-class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): self.stack1.append(node) def pop(self): ...原创 2019-09-14 17:16:22 · 177 阅读 · 0 评论 -
python leetcode两数相加 链表(完整的本地代码,包括输入,输出)
说明:因为在leetcode做算法题时,并不需要写输入输出,但是在实际线上笔试的时候需要自己调试,这里尤其是链表的插入以及链表的输出。还有链表的定义。完整代码如下:import sys#定义节点class ListNode: def __init__(self, x): self.value = x self.next = None#定义链表...原创 2019-09-25 15:30:30 · 1262 阅读 · 0 评论 -
Python 中 lambda 函数
1.匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。2.lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。其实lambda返回值是一个函数的地址,也就是函数对象。例子:s = lambda x,y:x+yprint(s(3,5))结...原创 2019-08-24 14:58:40 · 180 阅读 · 0 评论 -
联通笔试 2019 找出数组中出现次数超过一半的数 python实现
输入(范围-50~50): 第一行:数组数的个数 第二行:数组包含的数 3 1 2 2 输出 2 import sysdef find(lis,m): dict={} res=[] n=m//2 for i in range(len(lis)): if lis[i] no...原创 2019-09-28 17:03:32 · 228 阅读 · 0 评论 -
Python实现"最小栈
class MinStack(object): def __init__(self): """ initialize your data structure here. """ self.stack = [] # 存放所有元素 self.minStack = [] # 存放每一次压入数据时,栈中的最小值...转载 2019-08-20 18:39:25 · 392 阅读 · 0 评论 -
Python 快速排序 (非递归)
主要思想利用栈和pop函数实现操作列表:list = [6, 12, 27, 34, 21, 4, 9, 8, 11, 54, 39, 7, 3]第一次排序: stack[12,0] temp=6 排序前 [3, 4, 6, 34, 21, 27, 9, 8, 11, 54, 39, 7, 12] ...原创 2019-08-20 16:59:48 · 2108 阅读 · 0 评论 -
创建带头结点的单链表 ,插入数据,以及输出
#include#includetypedef struct node{int data;node *next;}node;//创建带头结点的单链表create(node *L){L= (node*)malloc(sizeof(node));if (L==NULL){printf ("0");}else{L->next=NULL;...原创 2019-03-03 19:14:13 · 10104 阅读 · 1 评论 -
顺序表的创建,输出,插入
#includetypedef struct{int data[100];int length;}sqlist;void creat(sqlist &L){int a;printf("输入长度:");scanf("%d",&a) ;for(int i=0;i{printf("请输入第%d个元素\t",i+1);scanf("...原创 2019-03-03 19:11:21 · 6157 阅读 · 0 评论 -
顺序栈的进栈,出栈。注意和顺序表的区别,倒序输出
#includetypedef struct {int data[5];int top;}stack;void push(stack &l){int i,a;for(i=0;i<5;i++){printf("输入");scanf("%d",&a);++(l.top);l.data[l.top]=a ;}}//特别...翻译 2019-03-03 19:15:21 · 2540 阅读 · 0 评论 -
链栈的进栈,出栈,头插法
#include#includetypedef struct LNode{int data;struct LNode *next;}LNode;struct LNode *initstack(LNode *L){//注意函数类型 struct LNodeL=(LNode *)malloc(sizeof(LNode));L->next=NULL;re...原创 2019-03-03 19:16:08 · 1423 阅读 · 0 评论 -
数据结构顺序队列,初始化,输入输出
#includetypedef struct{int data[5];int front;int rear;}queue;//初始化队列,注意&,代表对队列改变void InitQueue(queue &q) { q.front=-1; q.rear=-1; } //队列输入先 ++L.rear; 再L.d...原创 2019-03-03 19:16:56 · 5252 阅读 · 0 评论 -
链栈的初始化,进栈,出栈,以及出栈是相当于单链表的删除,进栈相当于单链表的头插法。
#include#include//定义链栈typedef struct Lnode{int data;struct Lnode *next;}Lnode;//初始化链栈struct Lnode *init(Lnode *L) {L=(Lnode*)malloc(sizeof(Lnode)); L->next=NULL;return L...原创 2019-03-03 19:18:01 · 990 阅读 · 0 评论 -
二叉树的初始化,以及遍历
参考以下链接:博主: Landpack https://www.baidu.com/link?url=chlFiQeDE-5yQno8EmpElsiryXEv8QgQd8_21E4UIYbq-g7WH_vKmyNKFPiHXtd4SZa_WZwzeT1WGLK_W_7-cK&wd=&eqid=8288c77500015031000000035b2b66a7...翻译 2019-03-04 18:42:34 · 3796 阅读 · 0 评论 -
堆排序,注意C语言中数组下标
#include<stdio.h>//堆排序//1.构造初建堆函数:void sift(int R[],int low,int high){//2*i为左孩子。2*i+1为右孩子int i=low,j=2*i;int temp=R[i];while(j<=high){ //取左右孩子的最大值与父节点交换 (大顶堆的定义) if(R[j]&...原创 2019-03-05 14:54:13 · 599 阅读 · 0 评论 -
动态规划问题 硬币问题 Python实现
#有面值分别为1,3,5的三种硬币若干,# 需要凑成11元最少需要多少硬币,# 凑成n元最少需要多少硬币?#动态规划算法:最优子结构 边界 状态转移方程def dynamic(amount): num=[1,3,5]#设置一个字典存储{钱数,硬币个数} dict={0:0} for i in range(1,amount+1):#硬币个数肯定不会大于钱数,我们...原创 2019-08-13 17:09:01 · 2361 阅读 · 0 评论 -
动态规划问题 最长回文串 Python实现
#基本思路是对任意字符串,如果头和尾相同,# 那么它的最长回文子串一定是去头去尾之后的部分的最长回文子串加上头和尾。# 如果头和尾不同,# 那么它的最长回文子串是去头的部分的最长回文子串和去尾的部分的最长回文子串的较长的那一个。#P[i,j] P[i,j]表示第i到第j个字符的回文子串数#dp[i,i]=1#dp[i,j]= dp[i+1,j−1]+2 |s[i]=s[j]#...原创 2019-08-13 19:38:18 · 690 阅读 · 0 评论 -
Python实现队列基本操作
class Queue: #初始化队列 def __init__(self): self.items=[] #加入队列 def enqueue(self,item): self.items.append(item) #出队列 def dequeue(self): return self.items....原创 2019-08-09 11:23:32 · 2774 阅读 · 0 评论 -
Python中遍历字典的方法
一:遍历key值:dict = {'a':'15岁', 'b':'14岁', 'c':'2岁', 'd':'1岁' }for key in dict: print(key + '已经' + dict[key] + '了')二:遍历value值:dict = {'a':'15岁', 'b':...原创 2019-08-09 11:31:37 · 314 阅读 · 0 评论 -
Python 快速排序 (递归)
def quick_sort(alist, start, end): if start >= end: return left = start right = end temp=alist[start] while left < right: while left < right and alist[rig...原创 2019-08-14 18:51:42 · 405 阅读 · 0 评论 -
俄罗斯方块 Python实现
小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块。因为它比较古老,所以规则和一般的俄罗斯方块不同。荧幕上一共有 n 列,每次都会有一个 1 x 1 的方块随机落下,在同一列中,后落下的方块会叠在先前的方块之上,当一整行方块都被占满时,这一行会被消去,并得到1分。有一天,小易又开了一局游戏,当玩到第 m 个方块落下时他觉得太无聊就关掉了,小易希望你告诉他这局游戏他获得的分数。 ...原创 2019-08-24 11:35:14 · 433 阅读 · 0 评论 -
Python 统计字典中key value 的最大值,最小值,以及统计key value的个数等
1.字典:参考:https://www.runoob.com/python/python-dictionary.html键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。dict = {'a': 1, 'b': 2, 'b': '3'}print(dict['b'])print(dict)后面的会替换前面的:如上结果:'b': 2,被 'b': '3'替换,...原创 2019-08-24 15:35:19 · 16853 阅读 · 0 评论 -
Python实现快速排序
Python快速排序是面试中常考的问题,是冒泡排序的改进,不稳定,O(nlog2n)def quick_sort_standord(array, low, high): if low < high: key_index = partion(array, low, high) quick_sort_standord(array, low, key_...翻译 2019-07-12 15:49:41 · 90 阅读 · 0 评论