当前位置:   article > 正文

BAT面试算法基础学习笔记_bat 固定长度数列

bat 固定长度数列

排序

归并排序, 改变有序区间(从1开始)

快速排序 {}3

堆排序 取出最大值存入数组

希尔排序 以距离值 跳跳比

桶排序

计数排序
身高

基数排序 个位数 序列 十位数 百位数

时间O(N*N)
冒泡 选择

O(N*logN)
快速

空间复杂度
O(1)
插入 选择 冒泡 堆排序 希尔排序

但是如果使用的是递归实现的,空间复杂度将不再是O(1),而是O(logN) 函数栈

OlgN-O(N)
快速

43335 快速不稳定
5115 希尔排序不稳定

快速排序:常量系数低

如果没有空间复杂度的限制,用哈希表实现
哈希表实现,时间复杂度为O(N),空间复杂度为O(N)

O(1)
先排序

合并有序数组

从后往前拷贝,避免原有的数据被覆盖,比较和拷贝

荷兰国旗问题

看当前数
|

{} 1 1 0 0 2 1 1 0 {}
0区 2区

查找矩阵中的有序数

数组右上角开始

需要排序的最短子数组的长度

【1,5,4,3,2,6,7】
返回4 【5,4,3,2】
方法:从左往右记录遍历过的最大值位置,会发生一种情况,当前的元素比右边的数大,记录这种情况的最右边的位置
在从右往左,同理
最后最小和最大的位置区间就是要进行排序的区间长度。

数组中的最大差值

例如某数组排序之后为
1 2 3 4 7 8 9

最大差值来自于4和7,所以返回3

思想来自于桶排序

遍历数组

最小 最大 N区间 元素个数
N+1 为最大值
构造空桶
空桶区间 的最大差值即为最大差值

字符串

  1. 广泛性
    1.1 字符串数组 查找 排序
    1.2 字符串对象

  2. 需要掌握的概率

    • 回文
    • 子串(连续)
    • 子序列(不连续)
    • 前缀树
    • 后缀树和后缀数组
    • 匹配
    • 字典序
  3. 需要掌握的操作

    • 与数组有关的操作:增删改查
    • 字符串替换
    • 字符串的旋转

字符串题目的常见类型

  1. 规则判断

    • 判断字符串符合整数规则
    • 判断字符串符合浮点数规则
    • 判断字符串符合回文数规则 TRUE or false
  2. 数字运算

    int 和long 类型表达整数范围有限,所以经常用字符串实现大整数

    与大整数相关的加减乘除操作,需要模拟笔算的过程

  3. 与数组有关的排序有关类型

    • 排序
  4. 字符计数

    • 哈希表
    • 固定长度的数组
      C/C++ 字符256 java 65536

    • 滑动窗口问题、寻找无重复字符串子串问题、
      计算变位词问题

  5. 动态规划问题

    • 最大子串长度问题
    • 最大回文子序列
    • 最长公共子串
    • 最长公共子序列
  6. 搜索类型

    • 宽度优先搜索
    • 深度优先搜索
  7. 高级算法与数据结构解决的问题

    • Manacher算法解决最长回文子串问题
    • KMP 算法解决字符串匹配问题
    • 前缀树结构
    • 后缀树和后缀数组

比较两棵树,T1中包含T2的子树,返回TRUE,否则返回false

方法1,遍历二叉树+判断匹配 O(N*M)

方法2:二叉树序列化+ KMP算法 O(M+N)

实际为KMP比较字符串

变形词
str1=“123” str2=”231” 返回TRUE

str1=“123” str2=”2331” 返回False

方法:使用哈希表 str1 str2 判断记录是否一致
可以借用数组

旋转词

  1. 判断str1 与str2 是否相等
  2. 如果相等,生成str1+str1的大字符串
  3. KMP算法判断是否含有str2

str1=“1 2 3 4”
str1+str1=“ 1 2 3 4 1 2 3 4”

穷举了所有的旋转词

单词间逆序

  1. 实现将字符串逆序的函数f
  2. 利用f将字符串所有字符逆序
    “pig loves dog”->”god sevol gip“
  3. 找到逆序后的字符串中每一个单词的区域,利用f将每一个单词的区域逆序
    “god sevol gip”->”dog loves pig”

一个字符串str,和一个整数i,i代表str中的位置,将str[0..i]移动到右侧,str[i+1..N-1] 移到左侧

str=”ABCDE” ,i=2. 将str调整为“DEABC”
要求,时间复杂度为O(N),额外空间复杂度为O(1)

原地调整
分为两步
1. 将str[0..i] 部分的字符逆序
A B C D E

C B A D E

  1. 将str[i+1~N-1] 部分的字符串
    C B A D E

C B A E D

  1. 将str整体的字符逆序
    C B  A E D
    D E A B C

活用局部逆序函数

 拼接字符串,返回字典序列最小的

strs=[“abc”, “de”];
abcde deabc 返回abcde

strs==[“b”,”ba”]
bab bba 返回bab

O(N*logN)
实质是排序

如果str1+str2

空格替换 “%20”

长度变化的规律,从后往前拷贝

字符串的括号有效匹配

str=() true str(()()) true
str=()) false str=()( false
str=()a() false

  1. 遍历 ‘࿰
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/227059
推荐阅读
相关标签
  

闽ICP备14008679号