![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数据结构
营琪
好好学习,天天向上,过犹不及!
展开
-
如何计算算法的复杂度
目录时间复杂度空间复杂度总结时间复杂度什么叫做时间复杂度呢??我们来看一个简单的程序 int n = 10 ;System.out.println("输出" + n);这段伪代码运行了多少次呢! 1次 ,时间时间复杂度为O(1):常数复杂度/常数阶。 for (int i = 0 ;i <n; i++){ Sy...原创 2019-07-16 17:39:03 · 28374 阅读 · 2 评论 -
算法:贪心算法与二分查找-理论与实战
目录贪心算法leetcode122:买卖股票的最佳时机 II二分查找leetcode:求69X的平方根二分查找的递归通用写法贪心算法概念:是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择。贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最...原创 2019-09-07 20:42:42 · 973 阅读 · 0 评论 -
算法:深度、广度优先搜索算法与剪枝-实战
目录leetcode:102. 二叉树的层次遍历方法一:BFS方法二:DFSleetcode:104. 二叉树的最大深度方法一:DFS方法二:BFSleetcode:111. 二叉树的最小深度方法一:DFS方法二:BFSleetcode:22. 生成正确括号方法一:搜索加剪枝附加:回溯leetcode:51. n皇后问题方法一:搜索加剪枝...原创 2019-09-06 13:37:59 · 990 阅读 · 0 评论 -
算法:深度、广度优先搜索算法与剪枝-理论
目录深度优先搜索算法(DFS)深度优先搜索算法伪代码广度优先搜索算法(BFS)广度优先搜索算法-代码剪枝深度优先搜索算法(DFS)百度百科:事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.通过栈实现。简单讲就是一路走到底,再换支路...原创 2019-09-04 21:57:32 · 1120 阅读 · 0 评论 -
算法:递归和分治-实战
目录leetcode:50实现pow(x,n),即计算 x 的 n 次幂函数。方法一、直接调用库函数方法二、暴力方法三、递归分治的做法leetcode:169求众数。方法一:暴力方法二:哈希表 ,元素出现次数存入map中方法三:分治方法四:扩展 Boyer-Moore 投票算法leetcode:50实现pow(x,n),即计算 x 的 n 次幂...原创 2019-09-02 10:18:24 · 210 阅读 · 0 评论 -
算法:递归和分治-理论
目录引入递归什么是递归一个例子:计算 n!。什么是分治一个例子:小写字母转化为大写字母另一个例子:leetcode:144二叉树的前序遍历引入递归一说起循环,大家都会说一个例子:“从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山...” 这是一个死循环,假如加上一个终止条件,第五个和尚就结束故事了,那...原创 2019-08-10 16:22:19 · 151 阅读 · 0 评论 -
算法:二叉树遍历-理论
目录什么是前中后序遍历前序遍历方法一:递归方法二:迭代中序遍历方法一:递归方法二:迭代后序遍历方法一:递归方法二:迭代1方法二:迭代2前中后序遍历在平时用的不多,实际上用到更多是深度优先和广度优先算法,那为什么要遍历二叉树呢!好像也就仅仅输出数据而已,但是对于二叉搜索树,中序遍历,就可以输出一个有序的结果了。什么是前中后序遍历1. 前序(Pr...原创 2019-08-09 17:13:25 · 240 阅读 · 0 评论 -
算法:树和图-实战
leetcode:98. 验证二叉搜索树思路:回到二叉搜索树,当前节点大于左子树,小于右子树。假如此树是二叉搜索树,那么应该满足这种有序的状态。递归递归思路,需要注意右子树的最小值为父亲节点,左子树的最大值也为父亲节点。class TreeNode { int val; TreeNode left; TreeNode right; Tree...原创 2019-08-08 19:15:07 · 906 阅读 · 0 评论 -
算法:列表List、映射Map、集合Set-理论
目录列表ListJava中的list是怎么实现的?映射MapJava中的Map是怎么实现的?集合SetJava中的Set是怎么实现的?下面通过一张List、map、set图,让大家回想起如何使用这些类列表List列表,该接口的用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。与集合不同,...原创 2019-07-28 18:52:41 · 686 阅读 · 0 评论 -
算法:树和图-理论
目录引入树树二叉树⼆叉搜索树红黑树java的树(TreeMap)是怎么实现的?上面是正常二叉树插入操作,下面是整理二叉树形成红黑树操作。引入图图引入树在说树之前,我们先回想一下链表,在当前节点保存下一节点的引用,类时的如下:class ListNode { int val; ListNode next; ListNode(...原创 2019-08-05 16:27:34 · 5248 阅读 · 0 评论 -
算法:哈希表HashTable-理论
哈希表,我们平时好像用到的不多,使用HashMap的时候,才间接的使用到了,在信息安全领域用到的比较多(文件效验、数字签名),下面我们先来看看哈希函数。哈希函数:将任意长度的数据映射到有限长度的域上,就是对一串数据m进行杂糅,输出另一段固定长度的数据h,作为这段数据的特征。类似的MD5算法也是一种哈希函数。例如String.hashCode package java.la...原创 2019-07-27 13:02:05 · 226 阅读 · 0 评论 -
算法:优先队列-实战
实战的题目都是leetcode的题目。目录leetcode:703实时判断数据流中第K大的元素方法一,直接快速排序方法二、创建长度为K的数组,判断最小元素第三种方法:运用小顶堆代替 长度为K的数组 ,判断最小元素leetcode:239返回滑动窗口内的最大值方法一、优先队列(大顶堆)方法二、迭代前K个元素,找出最大值leetcode:703实时判断数据流中第K大...原创 2019-07-26 17:23:13 · 195 阅读 · 0 评论 -
算法:栈和队列-实战
目录leetcode:20有效的括号第一种方法:使用栈第二种方法,实现栈的方式??leetcode:232用栈实现队列第一种方法:出队容易,入队难第二种方法:入队容易,出队难实战的题目都是leetcode的题。leetcode:20有效的括号解题思路既然文章的标题都说了是栈和队列了,那我们仔细想,题目的意思就是相聚的()要两两配对,是否全部都可以完全配...原创 2019-07-22 19:36:46 · 130 阅读 · 0 评论 -
算法:HashTable、List、Map、Set-实战
实战的题目都是leetcode的题目。leetcode:242有效字母异位词第一种解法:排序思路:通过对字符串排序,再比较是否相同,如 s=213,t=321 排序后 s=123,t=123,比较是否相同。时间复杂度O(NlogN)。class Solution { public boolean isAnagram(String s, String t) { ...原创 2019-07-30 20:41:06 · 266 阅读 · 0 评论 -
算法:栈和队列-理论
目录栈,stackJava的栈是怎么实现!队列,QueueJava的队列是怎么实现!通用数据结构复杂度操作栈,stack也可以翻译成堆栈,但是不能翻译成堆(heap)。栈百度百科关于栈的介绍是它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把...原创 2019-07-20 18:54:19 · 294 阅读 · 0 评论 -
算法:优先队列-理论
目录优先队列我们平时比较常见的优先队列的场景有什么?优先队列的实现机制java的优先队列是怎么实现的?优先队列我们先回忆一下什么是队列,队列,一种先进先出的数据结构。主要关注点在于先入的元素先出。队列我们先看一下百度百科关于优先队列的介绍在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in,...原创 2019-07-24 16:47:58 · 473 阅读 · 0 评论 -
算法:数组和链表-实战
目录leetcode:206.反转一个单链表第一种做法,迭代第二种做法,递归第三种做法leetcode:24.两两交换链表中的节点第一种做法,迭代第二种做法,递归leetcode:141环形链表第一种做法,硬做第二种做法,利用set集合第三种做法,快慢指针实战的题目都是leetcode的题。leetcode:206.反转一个单链表给的初...原创 2019-07-17 14:45:27 · 172 阅读 · 0 评论 -
算法:数组和链表-理论
目录数组Java的数组是怎么实现链表Java的链表是怎么实现我们先看看百度百科关于数组和链表的介绍吧。数组所谓数组,是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组既然我们刚刚讲到了算法的时间复杂度。数组访问的时间复杂度是多少呢!O(1)。数组插入...原创 2019-07-17 14:44:53 · 206 阅读 · 0 评论 -
算法:字典树(Trie)-理论与实战
回想我们百度一下的过程,输入几个单词后,自动搜索出可能的选择,当没有完全匹配的搜索结果,可以返回前缀最相似的可能。这个功能实现原理是上面呢?字典树这个功能的原理是字典树,通过匹配前缀,再通过一些内部算法,达到相似的可能,再输出给我们选择。字典树是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节...原创 2019-09-09 14:06:45 · 618 阅读 · 0 评论