返回首页

数据结构与算法笔记——By Bug

说明:本笔记为本人学习过程中随手写的笔记,为复习使用,笔记中可能存在遗漏或错误,具体请以官方文档和权威书籍为准!谢谢!

参考资料

基础知识需求

 

基础数据结构

二分查找

需求:在一个有序数组种查找值Target

算法描述

前提一个含有n个元素的有序数组,满足升序排列,提供一个待查值t
1设置两个指针,i=0, j=n-1
2当i>j结束查找
3获取中间元素索引m,小数向下取整
4如果target<Am,j=m-1,回到步骤2
5如果target>Am,i=m+1,回到步骤2
6如果target=Am,找到结果,结束查找

算法实现

基础版

改动版

JAVA二分查找方法binarySearch

二分查找处理重复数据

需求:返回重复数据的最左侧一个的下标

需求:返回重复数据的最右侧一个的下标

 

衡量算法的好坏

时间复杂度

常见大 $O$ 表示法

image-20221108114915524

按时间复杂度从低到高

空间复杂度

算法占用的内存情况等。

 

二分查找的性能

时间复杂度

空间复杂度

 

数组

概述

数组就是由一组元素组成的数据结构。每个元素至少一个索引或键来标识。

数组中的元素是连续存储的。

 

动态数组

数组默认是不能对数组进行增删操作的,可以使用动态数组进行增删改查数据

实现动态数组

 

二维数组

 

链表

链表是数据元素的线性集合,其中每个元素都指向下一个元素,元素存储上并不连续。

链表可分为:

链表的一个特殊节点:哨兵节点,也称哑元节点,它不存储数据,通常作为头尾使用。

单向链表

 

双向链表

 

递归

 

多路递归

 

基础算法