- 二分查找:也叫折半查找算法。主要针对一个有序的数据集合,查找思想类似分治思想,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素。
- 时间复杂度时间复杂度:o(log n);
- 1.数据序列元素不重复;
import java.util.Arrays;
public class SimpleBinarySearch {
public static int binarySearch(int[] array ,int value){
int low = 0;
int high = array.length-1;
while (low<=high){
int mid = (low+high)/2;
if (array[mid]==value){
return mid;
}else if (array[mid]<value){
low = mid+1;
}else {
high = mid-1;
}
}
return -1;
}
public static void main(String[] args ){
int[] array = new int[10];
array[0] = 1;
array[1] = 5;
array[2] = 7;
array[3] = 11;
array[4] = 25;
array[5] = 37;
array[6] = 41;
array[7] = 55;
array[8] = 57;
array[9] = 65;
System.out.println(Arrays.toString(array));
int i = binarySearch(array,25);
System.out.println("找到了目标元素的下标"+i+"---对应的值是" + array[i]);
}
}
- 2.元素重复(取第一个值)
if (array[mid]==value){
if (mid==0||array[mid-1]!=value){
return mid;
}else {
high = mid -1;
}
- 3.元素重复取最后一个值:
if (array[mid]==value){
if (mid==high||array[mid+1]!=value){
return mid;
}else {
low = mid +1;
}
-
散列表:又叫哈希表/Hash表,根据键(Key)直接访问在内存存储位置的数据结构,是由数组演化来的,利用了数组支持按照下标进行随机访问数据的特性。
-
散列函数是一个函数方法,能够将给定的key转换为特定的散列值,可以表示位 hashValue=hash(key)
-
散列冲突:两个不同的关键值(key)由于 散列函数值 相同,因而被映射到同一表位置上。
-
解决方案:
-
1.开放检测法:一旦出现了散列冲突,就重新去寻址一个空的散列地址
-
2.链表法:数组每个位置对应一个链表,所有散列值相同的元素都可以放到对应的链表中。
-
哈希算法:可以将任意数据通过一个函数转换成长度固定的数据串,即一个映射转换的规则
-
树:由n(n>0)个有限节点组成一个具有层次关系的集合;
-
节点的高度:节点到叶子节点经过的边数
节点的深度;根节点到该节点所经历的边的个数
节点的层数:节点的深度+1 -
二叉树:每个节点最多2个子节点
-
满二叉树:叶子结点全在最低层,除了叶子结点之外,每个节点都有2个子节点
-
完全二叉树:叶子结点全在最底下2层,最后一层叶子节点都靠左排列
并且除了最后一层,其它层的节点个数都达到最大(由存储结构决定) -
二叉查找树的特点:
1.左子树所有值小于根节点
2.右子树所有值大于根节点
3.任意节点的左右节点也分别为二叉查找树
4没有键值相等的节点 -
ALV(平衡二叉树)
1.可以是空数
2.任何一个节点的左子树与右子树都是ALV 并且高度差的绝对值小于1; -
堆:
1.堆是一个完全二叉树
2.堆中每一个节点的值都必须大于等于(小于等于)其子树中每个节点的值 -
图:图中的每一个元素称为顶点;任意2顶点相连接称为边; 从某顶点出发延伸出的边数个数称为度 无向图、有向图 、权重、 带权图
-
存储:
1.邻接矩阵存储图主要依赖于二维数组:对于无向图,如果顶点i与顶点j之间有边,我们就将a[i][j]与a[j][i]标记为1 对于有向图:看箭头指向判断是否标记为1; 对于带权图:数组中存储相应的权重; -
2.邻接表(一维数组+链表)
BFS 广度优先搜索 DFS深度优先搜索
-
字符串匹配算法:indexOf(),starWith(),endWith() 单模式字符串匹配算法:BF(暴风)算法,是一种蛮力算法
-
RK算法:利用Hash算法
-
贪心算法:在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是最好的算法;
-
背包问题: 解题思路:1.用数学模型来描述问题
2.把球节点问题分成若干个子问题
3.对每一子问题求解,得到子问题的局部最优解
4.把子问题的解局部最优解合成总解 -
B+树: 数据只保存在叶子里面,非叶子节点保存索引值;