
算法面试题
文章平均质量分 88
annuoa
这个作者很懒,什么都没留下…
展开
-
动态规划a
动态规划大部分动态规划能解决的问题,都可以通过回溯算法来解决,只不过回溯算法解决起来效率比较低,时间复杂度是指数级别的,动态规范在执行效率上要高很多,只管执行效率提高了,但是动态规划的空间复杂度也提高了,所以很多时候我们会说动态规划是一种空间换时间的算法思想。基础知识点-问题模型0-1背包问题对于一组不同重量、不可分割的物品,我们需要选择一些装入背包,在满足背包最大重量限制的前提下,背包中物品总重量的最大值是多少呢?weight:物品重量,n:物品个数,w:背包可承载重量public int原创 2021-08-30 18:32:15 · 202 阅读 · 0 评论 -
分治算法a
分治算法分治算法的核心思想就是分而治之。将原问题划分成n个小规模的问题,并且结构与原问题相似,递归的去解决这些子问题然后在合并其结果,就得到了原问题的解。分治算法是一种处理问题的思想,递归是一种编程技巧。满足分治的条件原问题与分解成的小问题具有相同的模式;原问题分解成的子问题可以独立求解,子问题之间没有相关性,这点是分治算法跟动态规划的明显区别;具有分解终止条件,也就是说,当问题足够小的时候可以直接求解;子问题和并成原问题,而这个合并操作的复杂度不能太高,否则就起不到减小算法总体复杂度的效果原创 2021-08-24 16:12:33 · 215 阅读 · 0 评论 -
贪心算法a
贪心算法贪心算法有很多经典的应用:霍夫曼编码、prim和kruskal最小生成树算法、dijkstra单源最短路径算法。贪心算法解决问题步骤很常见的一个问题,比如背包问题。第一步,当我们看到这类问题的时候,首先要联想到贪心算法:针对一组数据,我们定义了限制值和期望值,希望从中选出几个数据,在满足限制值的情况下,期望值最大。第二步,我们尝试看下这个问题是否可以用贪心算法解决:每次选择当前情况下,对限制值同等贡献量的情况下,对期望值贡献最大的数据。第三步,我们举几个例子看下贪心算法产生的结果是否是原创 2021-08-23 14:48:09 · 304 阅读 · 0 评论 -
跳表+散列表+哈希算法
跳表链表加多级索引的结构就是跳表跳表中快速的插入、删除、查询任意数据的时间复杂度是O(logn);跳表的空间复杂度是O(n)散列表散列表英文叫hash table,就是哈希表或者hash表。散列表用的事数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一中扩展,由数组演化而来。可以说,如果没有数组就没有散列表。散列表中有键、散列函数、散列值散列函数,就是一个函数,它可以定义成hash(key),其中可以表示元素的键值,hash(key)的值表示经过散列函数计算得到的散列值原创 2021-08-17 16:12:04 · 254 阅读 · 0 评论 -
二分查找算法
二分查找二分查找针对的是一个有序的数据集合,查找思想有点儿类似于分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0.二分查找的时间复杂度为O(logn)二分查找的递归与非递归实现非递归实现public int bsearch(int[] a, int n, int value) { int low = 0; int high = n - 1; while (low <= high) { int mid =原创 2021-08-16 19:21:09 · 963 阅读 · 0 评论 -
排序算法a
排序算法最经典的、最常用的排序算法:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。排序算法的三种要素:排序算法的执行效率最好、最坏、平均情况时间复杂度;时间复杂度的系数、常数、低阶;比较次数和交换(移动)次数;排序算法的内存消耗原地排序就是空间复杂度是O(1)的排序算法排序算法的稳定性待排序列的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。1.冒泡排序 public void bubbleSort(int[] a,int n原创 2021-08-13 15:19:23 · 345 阅读 · 0 评论 -
递归相关题目
递归递归,去的时候叫“递”,回来的时候叫“归”;递归的三个条件一个问题的解可以分解为几个子问题的解;这个问题与分解后的子问题,除了数据规模不同,求解思路完全相同存在递归终止条件写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。递归要注意的两点1. 递归代码要警惕堆栈溢出函数调用会使用栈来保存临时变量,每调用一次函数,都会将临时变量封装为栈帧压入内存栈,等函数执行完成返回时,才出栈。系统栈或者虚拟机栈空原创 2021-08-11 15:05:43 · 84 阅读 · 0 评论 -
栈和队列相关算法题目
算法面试题栈和队列栈栈的基本性质栈的应用小问题几个练习题有效的括号棒球比赛比较含退格的字符串单调栈[^1] [^2]单调栈模板下一个更大元素每日温度下一个更大的元素II队列循环队列阻塞队列和并发队列几个小的例子用队列实现栈设计循环队列功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章原创 2021-08-09 01:11:50 · 304 阅读 · 0 评论 -
二叉树和堆
突击算法面试题提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档二叉树和堆目录突击算法面试题二叉树和堆前言一、二叉树二叉树的查找:二叉树的插入二叉树的删除二叉树的遍历二叉树的广度优先遍历 二叉树的深度优先遍历翻转二叉树 判断二叉树是否对称求二叉树的深度(最大深度、最小深度...原创 2021-07-24 15:06:34 · 386 阅读 · 1 评论 -
数组和链表
算法面试题提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结一、数组数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表:数据排成像一条线一样的结构,最多只有前后...原创 2021-08-05 16:47:17 · 640 阅读 · 0 评论