牛客网《BAT面试算法精品课》学习笔记
目录
牛客网《BAT面试算法精品课》学习笔记
牛客网《BAT面试算法精品课》笔记一:排序
排序的详细实现:博客

牛客网《BAT面试算法精品课》笔记二:字符串
字符串Case:
Case1.
判断T2二叉树是否包含了T1
普通解法为二叉树遍历+匹配问题,考察t1中每个节点为头的子树是否与t2一致,时间复杂度为O(N*M),N代表t1节点数,M代表t2节点数。
但是这道题的最优解为O(M+N),将t1序列化为字符串str1,t2序列化为字符串str2,用KMP算法判断str1中是否含有str2
Case2.
给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1与str2互为变形词,请实现函数判断两个字符是否互为变形词。
举例:
Str1=“123”,str2=“231”,返回true
Str1=“123”,str2=“2331”,返回false
可以使用哈希表做字符计数,两个 str生成两个哈希表,比较两个表的记录是否一致。也可以用固定长度的数组代替哈希表结构。
Case3.
给定一个字符串str,把字符串str前面任意的部分挪到后面去形成的字符串叫做str的旋转词。比如str=“1234”,str的旋转词有:“1234”,“2341”,“3412”,“4123”,给定两个字符串a和b,请判断a和b是否互为旋转词。
举例:
a=”cdab”,b=”abcd”,返回true
a=”1ab2”,b=”ab12”,返回false
本题最优解时间复杂度O(N)
首先判断str1与str2是否长度相等,如果长度相等,生成str1+str2的大字符串,用KMP算法判断大字符串中是否含有str2
举例说明:
str1=“1 2 3 4”
str1+str1=”1 2 3 4 1 2 3 4”
1234,2341,3412,4123都是它的旋转词
Case4.
给定一个字符串,请在单词间做逆序调整
举例:
“pig loves dog”逆序为“dog loves pig”
先写一个让所有字符逆序的函数f,用函数f将句子整体的字符逆序:“pig loves dog”变为“god sevol gip”,然后用f将每一个单词逆序,最后得到“dog loves pig”
Case5.
给定一个字符串str,和一个整数i,i代表str中的位置,将str[0..i]移到右侧,str[i+1..N-1]移到左侧
举例:
str=“ABCDE“,I=2,将str调整为”DEABC“
要求时间复杂度O(N),额外空间复杂度O(1)
因为有空间复杂度要求,所以不能开辟新数组,之能在原数组基础上操作。首先将str[0..i]部分的字符逆序ABCDE:CBADE,再将str[i+1..N-1]部分的字符逆序,CBADE:CBAED,最后将整个的字符逆序,CBAED:DEABC
Case6.
给定一个字符串类型的数组strs,请找到一种拼接顺序,使得所有的字符串拼接起来组成的大字符串是所有可能性中字典顺序最小的,并返回这个大字符串。
举例:
Strs=[“abc”,”de”],可以拼成“abcde“,也可以拼成”deabc“,但前者字典顺序更小,所以返回”abcde“
Strs=[“b”,”ba”],可以拼成“bba“,也可以拼成”bab“,但后者字典顺序更小,所以返回”bab“。
最优解的时间复杂度O(N*logN)
错误方案:根据单独每个字符串的字典顺序排序
正确方案:如果str1+str2<str2+str1,则str1放在前面,否则str2放在前面
Case7.
给定一个字符串str,将其中所有空格字符替换成“%20“,假设str后面有足够的空间。
Str=”a b c”
遍历str,发现空格数为2,所以在str替换后,长度为5+2*2=9
然后从后开始遍历str,将c放在第九个位置,结果为a%20b%20c
Case8.
给定一个字符串str,判断是不是整体有效的括号字符串
举例:
Str=”()”,返回true;str=“(()())“,返回true;str=”(())“,返回true;
Str=“())“,返回false;str=”()(“,返回false;str=”()a()“,返回false;
本题时间复杂度O(N),额外空间复杂度O(1)
01.整形变量num,代表’(’出现次数与‘)’出现次数的差值
02.遍历的过程,遇到‘(’,num++,遇到‘)’,num—
03.遍历的过程中如果num<0,则直接返回false
04.如果一直没出现03的情况,则一直遍历下去
05.遍历完成后,如果num==0,则返回true,否则返回false
Case9.
给定一个字符串str,返回str中的最长无重复字符子串的长度
举例:
str=”abcd”,返回4
str=“abcd”,最长无重复子串为“abc”,返回3
本题最优解时间复杂度为O(N),额外空间复杂度O(N).
求出以str中每个字符结尾的情况下,最长无重复字符子串的长度,并在其中找出最大值返回。思路:由于这个题目只要给出最长不重复子串的长度,所以代码比较简单。第一思路就是利用哈希表来进行操作。用字符当做键值,字符在串中的位置当做实值。用pre变量记录字符第一次出现的位置,最大长度max就是利用当前位置减去pre就是当前最大长度了。
牛客网《BAT面试算法精品课》笔记三:队列和栈
牛客网《BAT面试算法精品课》笔记四:链表
牛客网《BAT面试算法精品课》笔记五:二分搜索
牛客网《BAT面试算法精品课》笔记六:二叉树
牛客网《BAT面试算法精品课》笔记七:位运算
牛客网《BAT面试算法精品课》笔记八:排列组合
牛客网《BAT面试算法精品课》笔记九:概率
牛客网《BAT面试算法精品课》笔记十:大数据
牛客网《BAT面试算法精品课》笔记十一:动态规划
牛客网《BAT面试算法精品课》学习笔记的更多相关文章
- 腾讯PCG(后台开发) 牛客网视频面试 一面
腾讯视频面试 作为一个小渣渣记录一下,腾讯是我一直想进的公司,但其实准备的时间不是很长,也不是科班还是存在很大的劣势,记录一下找工作的经历. 首先说一下,这是我第一次视频面试,还是蛮紧张的.不过面试官 ...
- 像素反转 牛客网 程序员面试金典 C++ Python
像素反转 牛客网 程序员面试金典 题目描述 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度. 给定 ...
- 二进制插入 牛客网 程序员面试金典 C++ Python java
二进制插入 牛客网 程序员面试金典 题目描述 有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始. 给定两个数int n和int ...
- 寻找下一个结点 牛客网 程序员面试金典 C++ java Python
寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...
- 原串反转 牛客网 程序员面试金典 C++ Python
原串反转 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniS ...
- 高度最小的BST 牛客网 程序员面试金典 C++ Python
高度最小的BST 牛客网 程序员面试金典 C++ Python 题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] val ...
- 输出单层结点 牛客网 程序员面试金典 C++ Python
输出单层结点 牛客网 程序员面试金典 C++ Python 题目描述 对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表. 给定二叉树的根结点指针TreeNode* root,以及链表上 ...
- 访问单个结点的删除 牛客网 程序员面试金典 C++ Python
访问单个结点的删除 牛客网 程序员面试金典 C++ Python 题目描述 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点. 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回f ...
- 翻转子串 牛客网 程序员面试金典 C++ Python
反转子串 牛客网 程序员面试金典 C++ Python 题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串.请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查 ...
随机推荐
- RedHat Linux下iptables防火墙设置
一般情况下iptables已经包含在Linux发行版中.运行 # iptables --version 来查看系统是否安装iptables 启动iptables:# service iptables ...
- Spring Cloud Sleuth服务链路追踪(zipkin)(转)
这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件. 一.简介 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案, ...
- SSM-SpringMVC-01:SpringMVC是什么?SpringMVC执行流程
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- SpringMVC简介: SpringMVC也叫Spring Web mvc,属于表现层的框架.Sprin ...
- 译MassTransit 创建消息消费者
创建消息消费者一个消息消费者是一个 可以消费一个或多个消息类型的类,指定IConsumer<T>接口,T为消息类型 public class UpdateCustomerConsumer ...
- centos环境的python、scrapy部署
1 操作系统 Centos 6.5 64bit 或以上版本 2 软件环境 提示:(1)用什么软件:(2)运行环境(3)开发包. Python:Python-2.7.6.tgz Scrapy:Scrap ...
- 数据分析工具Pandas
参考学习资料:http://pandas.pydata.org 1.什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analys ...
- MySQL数据库简识
MySQL:关系型数据库 (由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗下产品) 开源 免费 不要钱 ...
- ATOM系列之-atom报错"Cannot load the system dictionary for zh-CN"
atom报错"Cannot load the system dictionary for zh-CN" 想必很多人(程序猿&程序媛)都和我一样,喜欢的这款很拉风的代码编辑器 ...
- BZOJ_3048_[Usaco2013 Jan]Cow Lineup _双指针
BZOJ_3048_[Usaco2013 Jan]Cow Lineup _双指针 Description Farmer John's N cows (1 <= N <= 100,000) ...
- js多个元素随机且不重叠分布在页面中
最近,公司要做一个类似挖矿的项目,大概其是当用户登录进入首页后,如果用户有已经生成的原力值,则在其点击原力值后可以类似蚂蚁森林那样收集原力值,当用户将所有的原力值收集完毕后开始提醒用户新的原力值正在生 ...