直通BAT
文章平均质量分 55
Andyato0520
尚未佩妥剑,转眼便江湖。
愿历尽千帆,归来仍少年!
展开
-
直通BAT面试算法精讲--字符串(1)
字符串面试题的特点: 1.广泛性 (1)字符串可以看做字符类型的数组,与数组排序、查找、调整有关 (2)很多其他类型的面试题可以看做字符串类型的面试题 2.需要掌握的概念 (1)回文 (2)子串(连续) (3)子序列(不连续) (4)前缀树(Trie树) (5)后缀树和后缀数组 (6)匹配 (7)字典序 3.需掌握的操作: (1)与数组相关的操作:增删...原创 2018-07-16 22:26:43 · 394 阅读 · 1 评论 -
数组和链表的区别
数组在内存中是连续存储的,链表是动态分配内存的数组内存空间要求高,可能存在数据越界或者内存空间浪费;链表内存利用率高,不会浪费内存数组大小固定,不能动态扩展。链表可以动态扩展数组元素存放在栈区,链表元素存放在堆去数组查找元素的时间复杂度是O(1),链表查找元素时间复杂度是O(n)数组插入和删除元素的时间复杂度是O(n),链表插入和删除元素的时间复杂度是O(1)...原创 2018-09-28 14:16:20 · 538 阅读 · 0 评论 -
二叉树遍历
class TreeNode: def __init__(self,x): self.value = x self.left = None self.right = Noneclass Tree: def __init__(self): self.queue = [] #用队列存储树的结点 self...原创 2018-09-14 10:49:01 · 171 阅读 · 0 评论 -
数据结构----排序算法
一、排序算法的说明1 排序的定义 对一序列对象根据某个关键字进行排序。2 术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度: 一个算法执行所耗费的...原创 2018-03-13 16:54:21 · 334 阅读 · 0 评论 -
直通BAT面试算法精讲--链表(2)
案例三题干: 对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。 给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。 * 测试样例: * {1,4,2,5},3 * {1,2,4,5} * * 解析:...原创 2018-08-06 15:36:34 · 185 阅读 · 0 评论 -
直通BAT面试算法精讲--队列和栈(2)
案例二双栈队列练习题 题干: 编写一个类,只能用两个栈结构实现队列,支持队列的基本操作(add,poll,peek) 解题思路: 两个栈,一个用来实现入队,一个用来实现出队class Solution(): def __init__(self): self.stack1 = [] self.stack2 = [] def pus...原创 2018-07-27 22:06:54 · 319 阅读 · 0 评论 -
直通BAT面试算法精讲--队列和栈(1)
队列和栈的性质: 1.栈是先进后出 2.队列是先进先出 3.栈和队列一般有数组和链表两种实现方式栈结构的基本操作: 1.pop操作 2.top或者peek操作 3.push操作 4.size操作队列结构的基本操作 1.push操作 2.pop操作队列和栈的基本操作,都是时间复杂度为O(1)的操作双端队列 首尾都可以压入或者弹出元素优先级队列 根据元素的优先...原创 2018-07-27 16:06:08 · 436 阅读 · 0 评论 -
直通BAT面试算法精讲--链表(1)
链表问题知识点和注意事项 1.链表问题算法难度不高,但考察代码实现能力。 2.链表和数组都是一种线性结构,数组是一段连续的存储空间,链表空间不一定保证连续,是临时分配的链表的分类 1.按链接方向分类:单链表,双聊表 2.有无环:普通链表,循环链表链表问题代码实现关键点 1.链表调整函数的返回值,类型要求往往是节点类型。 2.处理链表过程中,先采用画图的方式理清逻辑。...原创 2018-07-30 20:55:28 · 280 阅读 · 0 评论 -
直通BAT面试算法精讲--栈和队列(3)
案例五滑动窗口练习题 题干: 有一个整形数组arr和一个大小为w的窗口,从数组的最左边滑到最右边,窗口每次向右滑一个位置,返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值,以数组为[4,3,5,4,3,3,6,7],w=3为例,因为第一个窗口[4,3,5]的最大值为5,第二个窗口[3,5,4]的最大值为5,第三个窗口[5,4,3]的最大值为5,第四个窗口[4,...原创 2018-07-29 21:12:41 · 224 阅读 · 0 评论 -
直通BAT面试算法精讲--排序(4)
案例四荷兰国旗问题 三色排序问题对只包含0,1,2的整数数组进行排序,要求使用交换、原地排序,而不是利用计数进行排序,做到0全在数组左边,1在中间,2在右边 测试用例: arr = [1,1,0,0,2,1,1,0] 输出:[0,0,0,1,1,1,1,2]解题思路: 在数组左侧设置一个0区域,初始长度为0,在数组右侧设置一个2区域,初始长度为0 从左右到遍历,如果当前...原创 2018-07-14 19:13:07 · 189 阅读 · 0 评论 -
直通BAT面试算法精讲--排序(3)
注: 所有的代码都是用python实现的,都是自己写的,可能有些地方不太完善案例一已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离不超过k,并且k相对于数组长度来说很小。请问选择什么方法对其排序比较好解题思路: 移动不超过k,说明最小值位于0~k-1中,将0~k-1组成个最小堆。弹出堆顶元素,将位置k上的数放置堆顶,再次调整小根堆。递归实现。实...原创 2018-07-14 16:35:29 · 270 阅读 · 0 评论 -
直通BAT面试算法精讲--排序(2)
注: 所有的代码都是用python实现的,都是自己写的,可能有些地方不太完善稳定性问题稳定的:冒泡、插入、归并、计数、基数、桶排序 不稳定:快速、选择、希尔排序、堆排序(快选希堆不稳,堆归选基不变,不变指的是运行时间不变,与初始状态无关)补充说明 1.排序算法无绝对优劣 算法效果取决于排序的元素。例如人身高,数值范围小,可以选择计数排序,但对于均匀分布的整数,计数排序...原创 2018-07-14 16:15:35 · 236 阅读 · 0 评论 -
直通BAT面试算法精讲--排序(1)
注: 所有的代码都是用python实现的,都是自己写的,可能有些地方不太完善冒泡排序问题时间复杂度:O(n^2) 空间复杂度:O(1)def bubble_sort(arr,n): if not arr: return None for i in range(n): for j in range(i+1,n): ...原创 2018-07-14 16:06:32 · 250 阅读 · 0 评论 -
直通BAT面试算法精讲--字符串(3)
案例7空格替换练习题 题干: 给定一个字符串str,将其中所有的空格字符替换成’%20’,假设str后面有足够的空间class Solution(): def replace(self,strs): if strs=='' or len(strs)==0: return strs if ' ' in strs: ...原创 2018-07-24 22:20:27 · 215 阅读 · 0 评论 -
直通BAT面试算法精讲--字符串(2)
案例三两串旋转练习题如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。 比如A=”12345”, A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。 对于两个字符串A和B,请判断A和B是否互为旋转词。给定两个字符串A和B及他们的长度lena,lenb,请设计一个函数,返回一个bool值,代表他们是否互为旋转...原创 2018-07-23 17:56:57 · 217 阅读 · 0 评论 -
c++中引用和指针的区别
指针和引用的区别:(1)当引用被创建时,它必须被初始化。而指针则可以在任何时候被初始化。(2)一旦一个引用被初始化为指向一个对象,它就不能被改变为对另一个对象的引用。而指针则可以在任何时候指向另一个对象。(3)不可能有NULL引用。必须确保引用是和一块合法的存储单元关联。进一步解析:指针和引用都是 C++ 中的基本语法成份,它们既有联系,也有不同之处。它们都是地址的概念,其中指针指向一...转载 2018-09-29 13:59:08 · 355 阅读 · 0 评论