赞
踩
归并排序, 改变有序区间(从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.2 字符串对象
需要掌握的概率
需要掌握的操作
字符串题目的常见类型
规则判断
数字运算
int 和long 类型表达整数范围有限,所以经常用字符串实现大整数
与大整数相关的加减乘除操作,需要模拟笔算的过程
与数组有关的排序有关类型
字符计数
固定长度的数组
C/C++ 字符256 java 65536
滑动窗口问题、寻找无重复字符串子串问题、
计算变位词问题
动态规划问题
搜索类型
高级算法与数据结构解决的问题
比较两棵树,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 判断记录是否一致
可以借用数组
旋转词
str1=“1 2 3 4”
str1+str1=“ 1 2 3 4 1 2 3 4”
穷举了所有的旋转词
单词间逆序
一个字符串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
C B A E D
活用局部逆序函数
strs=[“abc”, “de”];
abcde deabc 返回abcde
strs==[“b”,”ba”]
bab bba 返回bab
O(N*logN)
实质是排序
如果str1+str2
长度变化的规律,从后往前拷贝
str=() true str(()()) true
str=()) false str=()( false
str=()a() false
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。