数据结构与算法
文章平均质量分 59
数据结构与算法
姜小迪
冲冲冲
今天不学习
明天倒垃圾
展开
-
学习思维导图
原创 2021-04-27 21:57:23 · 54 阅读 · 0 评论 -
例题集 排序
小和问题(归并排序)逆序对问题(归并排序)partition分数组(快速排序)荷兰国旗问题(快速排序给定一个数组,求如果排序之后,相邻两个数的最大差值,要求时间复杂度为O(N),且不能使用基于比较排序(桶排序)1.小和问题(归并排序) //测试 int[] arr = {1,2,3,4}; int sum = smallSum(arr); Log.d("jiang", String.valueOf(sum));//归并排序 publi.原创 2021-07-04 15:35:18 · 116 阅读 · 0 评论 -
例题集 字符串
前缀树降序排序字符串最小字典序判断异位字符串组合异位字符串1.前缀树思路:1.用路径表示字符2.每个节点有path标记表示以这个字符为前缀有多少3.每个节点有end标记表示有多少个相同字符串加了进来 public static class PrefixTree { private int path; private int end; private PrefixTree[] nexts; public Pref.原创 2021-07-15 09:35:20 · 96 阅读 · 0 评论 -
例题集 数组
删除重复出现元素合并两个有序数组整体移动数组查找主要元素三数之和1.删除重复出现元素题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。要求:不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:双指针法当前指针指向第一个位置比较指针指向第二个位置如果arr[cur] == arr[compare]->compare下移如果arr[cur]!= arr[c.原创 2021-07-14 22:55:22 · 103 阅读 · 0 评论 -
例题集 堆
建立大根堆每插入一个数建立大根堆当一个数改变时,将这个数组调整为大根堆1. 建立大根堆给定一个数组,将这个数组变成大根堆思想:从arr[0]开始,假设arr[0]已经是一个大根堆,那么从arr[1]~arr[arr.length - 1]看作依次插入数组的一个数,在此基础上排序成大根堆public class createHeap { //测试 public static void main(String[] args) { int[] arr = {7,7,5,.原创 2021-07-04 15:36:38 · 129 阅读 · 0 评论 -
例题集 栈
用数组实现大小固定的栈实现一个特殊的栈,在实现栈基本功能的基础上,在实现返回栈中最小元素的操作用栈结构实现队列结构1.用数组实现大小固定的栈思想:用index指向的位置为下一个数所要存放的地方若要存放数,先判断是否还能放数,再将index++,把数存进去若要取数,先判断是否还能取数,再将index–(可以不用把数取出,因为下一个要存进的数会覆盖掉) public static class ArrayStack{ private Integer[] arr; .原创 2021-07-04 15:39:45 · 105 阅读 · 0 评论 -
例题集 队列
用数组实现大小固定的队列用队列结构实现栈结构猫狗队列问题1.用数组实现大小固定的队列用size表示存入的数量,end表示下一个存放数的下标,start表示下一个取出数的下标若要存放数,先判断是否能存,end如果到底就回到0不然就++若要取出数,先判断是否能取,start如果到底就回到0不然就++public static class ArrayQueue{ private Integer[] arr; private Integer size; .原创 2021-07-04 15:42:04 · 75 阅读 · 0 评论 -
例题集 矩阵
转圈打印矩阵旋转正方形矩阵之字形打印矩阵在行跟列都排好序的矩阵中找数1.转圈打印矩阵给定一个整型矩阵matrix,请按照转圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9, 5,6,7,11, 10 。要求时间复杂度O(1)思路:找到矩阵左上角的位置和右下角的位置按转圈的方向先打印最外层对于最外层,要判断是否只有一行或者一列打印完最外层,在打印里面的一层…重复步.原创 2021-07-04 15:43:40 · 137 阅读 · 0 评论 -
例题集 链表
小和问题逆序对问题荷兰国旗问题原创 2021-04-30 15:54:44 · 238 阅读 · 3 评论 -
例题集 树
实现二叉树的先序、中序、后序遍历(递归方式)实现二叉树的先序、中序、后序遍历(非递归方式)直观的打印一颗二叉树在二叉树中找到一个节点的后继节点(中序遍历的下一个结点为后继结点)在二叉树中找到一个节点的前驱节点(中序遍历的前一个结点为前驱结点)25.实现二叉树的先序、中序、后序遍历(递归方式)先序 private static void preOrder(Node nodeHead) { if (nodeHead == null){ return.原创 2021-06-23 17:25:48 · 125 阅读 · 0 评论 -
例题集 哈希表
设计RandomPool结构并查集岛问题1.设计RandomPool结构题目要求: 设计一种结构,在该结构中有如下三个功能insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。getRandom(): 等概率随机返回结构中的任何一个key。 public static class RandomPool<T>{ private final HashMap<T,Integer>.原创 2021-07-04 20:40:20 · 307 阅读 · 2 评论 -
例题集 贪心算法
最大金钱最多安排最小拼接字典序最多雪糕1.最大金钱题目:两个数组:cost数组代表做每个项目需要花费多少钱;profit数组代表做每个项目能获得多少利润(纯利,即拿回的钱是花费的钱+利润)。默认里面都没有负数。有一个启动资金w,一次只能做一个项目,不能并行。k:最多做k个项目问:最终获得的最后钱数思路1.用一个Node类保存cost、profit信息2.全部分别丢进cost的小根堆(优先级队列)3.判断有多少可以从cost的小根堆丢进profit的大根堆(优先级队列)4.判断.原创 2021-07-15 10:03:54 · 120 阅读 · 0 评论 -
知识点总结
时间复杂度对数器分析递归思想1.时间复杂度常数时间操作:如果一个操作跟数据量大小没有关系,每次都是固定时间完成的操作,称之为常数时间操作。如:数组寻址、判断值、比较大小、数组赋值…时间复杂度为:在一个算法中,在最坏情况下,用 常数操作数量 来作为评判指标。在常书操作数量的表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分表达式记为 f(N),则时间复杂度为O(f(N))例子;一个有序数组A长度为N,一个无序数组B长度为M,打印B中的所有不在A中的数算法1:对于B中的每.原创 2021-04-27 22:23:56 · 54 阅读 · 0 评论 -
算法
冒泡排序选择排序插入排序1.冒泡排序思想:从arr[0]开始,每一轮前后比对,将最大的数放在数组最后面;每一轮结束,最后一个位置则不再考虑,因为此时已经是整个数组中最大的数//运行 int[] arr = {9,8,9,7,6,5,4,2,0}; bubbleSort(arr); for (int i = 0; i < arr.length;i++){ Log.d("jiang", String.valueOf(ar.原创 2021-04-27 22:59:58 · 114 阅读 · 0 评论 -
数据结构(结构)
基本知识点数组栈链表队列图哈希表树堆1.基本知识点(1)存储结构顺序存储结构概念:用一组在内存上连续的 存储单元依次存储数据元素数据元素之间的逻辑关系由元素的存储位置来表示优点:(1)无需为表示结点的逻辑关系增加额外空间(2)可以方便的存取表中的任意元素缺点:(1)插入、删除某个结点必须移动大量结点(2)要预先进行静态分配物理空间链接存储结构概念:用一组在内存上任意的存储单元存储数据元素数据元素之间的逻辑关系由指针来表示优点:(1)插入、删除.原创 2021-06-15 16:34:34 · 81 阅读 · 0 评论