牛客网《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面试算法精品课》学习笔记的更多相关文章

  1. 腾讯PCG(后台开发) 牛客网视频面试 一面

    腾讯视频面试 作为一个小渣渣记录一下,腾讯是我一直想进的公司,但其实准备的时间不是很长,也不是科班还是存在很大的劣势,记录一下找工作的经历. 首先说一下,这是我第一次视频面试,还是蛮紧张的.不过面试官 ...

  2. 像素反转 牛客网 程序员面试金典 C++ Python

    像素反转 牛客网 程序员面试金典 题目描述 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度. 给定 ...

  3. 二进制插入 牛客网 程序员面试金典 C++ Python java

    二进制插入 牛客网 程序员面试金典 题目描述 有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始. 给定两个数int n和int ...

  4. 寻找下一个结点 牛客网 程序员面试金典 C++ java Python

    寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...

  5. 原串反转 牛客网 程序员面试金典 C++ Python

    原串反转 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniS ...

  6. 高度最小的BST 牛客网 程序员面试金典 C++ Python

    高度最小的BST 牛客网 程序员面试金典 C++ Python 题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] val ...

  7. 输出单层结点 牛客网 程序员面试金典 C++ Python

    输出单层结点 牛客网 程序员面试金典 C++ Python 题目描述 对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表. 给定二叉树的根结点指针TreeNode* root,以及链表上 ...

  8. 访问单个结点的删除 牛客网 程序员面试金典 C++ Python

    访问单个结点的删除 牛客网 程序员面试金典 C++ Python 题目描述 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点. 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回f ...

  9. 翻转子串 牛客网 程序员面试金典 C++ Python

    反转子串 牛客网 程序员面试金典 C++ Python 题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串.请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查 ...

随机推荐

  1. Net Core动态加载webservice/WCF

    1.动态加载的目的 前端时间和顺丰对接了个项目(PS:顺丰的开发对外能力真的是掉粉),用的webservice 测试时用的无固定IP访问,正式版需要固定IP访问,我的理解是web服务都是全网络可以访问 ...

  2. dmraid 用法

    dmraid 全名为设备对应器磁盘阵列(Device Mapper RAID),利用Linux内核提供的设备对应器(Device Mapper)机制 ,为多种磁盘阵列设备提供磁盘阵列的设备文件,让用户 ...

  3. 前端面试题总结二(js原型继承)

    今天这篇文章整理了JS原型和继承的一些知识点,面试的时候  基!本!都!会!问!还不快认真阅读下文,看看你还有哪些知识点需要掌握吧~ 1.原型链 基本思想:利用原型让一个引用类型继承另外一个引用类型的 ...

  4. AJAX from S3 CORS fails on preflight OPTIONS with 403

    解决办法: 将 <!-- Sample policy --> <CORSConfiguration> <CORSRule> <AllowedOrigin> ...

  5. openfire推送离线聊天信息的插件

    插件说明 在手机的聊天应用中,经常出现的一个需求就是把用户的离线消息通过推送系统推送到用户的手机上,为了实现这个功能,本人就开发了本插件,这个openfire 插件是拦截了发给openfire用户的离 ...

  6. 关于linux find命令的使用

    find 和 xargs   xargs和find 在 使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令 ...

  7. MVC项目中怎么浏览html页面

    public class HomeController : Controller { public ActionResult Index() { //return View(); //return R ...

  8. Oracle的dual表是个什么东东

    dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 sele ...

  9. wukong.go

    package wukong import (     _ "github.com/boltdb/bolt"     _ "github.com/cznic/kv&quo ...

  10. bzoj5251 [2018多省省队联测]劈配

    直接网络流模拟即可AC. 可持久化+暴力=90分, 可持久化+二分=30分, 暴力加边+二分=100分. 我也很无奈啊. Ivan便涨红了脸,额上的青筋条条绽出,争辩道,“memcpy也是可持久化…… ...