面试算法笔记——详解桶排序以及排序总结
详解桶排序以及排序总结堆
堆结构就是用数组实现的完全二叉树结构
完全二叉树中如果每棵子树的最大值都在顶端就是大根堆
完全二叉树中如果每棵子树的最小值都在顶端就是小根堆
堆结构的heapInsert与heapify操作
堆结构的增大和减少
优先级队列结构,就是堆结构
首先要了解什么是完全二叉树?
完全二叉树是由满二叉树而引出来的,若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数(即1~h-1层为一个满二叉树),第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
我们可以用数组来表示,从0开始的连续一段看作是完成全二叉树,用size来规定有几个数是这个树里。
他具有以下特性:
i位置的左孩子可以表示为:2 \times i +1
右孩子:2 \times i +2
父:\frac{i-1}{2}
而堆是比较特殊的完全二叉树,所谓大根堆表示每一颗子树的最大值都是头节点的值,反之则是小根堆。
堆排序在进行堆排序之前,让我们先引入heapInsert和heapify操作:
heapInsert操作以大根堆为例:
在算法中,我们可以先堆再比较 ...
面试算法笔记——认识O(NlogN)的排序
认识O(NlogN)的排序递归首先有这样一个问题:我们在二分时喜欢用:
mid=(L+R)/2来表示,然而这么做却有一定的问题,L+R可能会溢出int的长度范围
所以可以写成:
mid=L+(R-L)/2;
再简化:mid = L + ((R- L))>> 1); 右移一位相当于除以二,左移相当于乘。
12345678910111213141516public class Code08_GetMax { public static int getMax(int[] arr){ return process(arr,0,arr.length-1); } //arr从L到R的范围求最大值 public static int process(int[] arr ,int L ,int R){ if(L == R){ //终止条件 return arr[L]; } int mid = L + ((R-L) >> ...
面试算法笔记(1)
本笔记内容均来源于左程云老师课程
一周刷爆Leetcode
认识复杂度和简单排序算法时间复杂度一般采用大O表示法,同时省去常数项
时间复杂度是一个算法流程中,常熟操作数量的一个指标,常用O表示。在表达式中过,只需要高阶项,不需要低阶项,也不需要高阶项大系数,剩下的部分如果为f(n),那么时间复杂度即为O(f(n))。
评价一个算法流程的好坏,先看时间复杂度的指标,再分析不同数据样本在的实际运行时间,也就是“常数项时间”
常数操作
一个操作如果与样本的数据量没有关系,每次都是固定时间内完成的操作叫做常数操作。
简单排序算法选择排序法1234567891011121314151617181920212223242526public class SelcetionSort { public void selectionSort(int[] array){ if(array == null || array.length<=2){ return; } for(int i = ...
Java笔记(2)
Java基础语法注释、标识符、关键字注释
在我们写代码时,如果代码量比较小,我们还可以自己看懂,但是当项目结构复杂起来,我们需要用到注释来让自己和别人理解。
注释并不会被执行,书写注释是一个很好的习惯。写代码时一定要注意规范。
Java的注释有三种,分别是
单行注释:用“//”表示
1234567public class Main { public static void main(String[] args) { //这是单行注释,输出一个HelloWorld System.out.println("HelloWorld"); }}
多行注释:以“/ 注释 /”,可以注释一段文字
1234567891011public class Main { public static void main(String[] args) { System.out.println("HelloWorld"); /* ...
Java笔记(1)
Java入门
语法与C相似
没有指针,内存管理
可移植性,一次编写,到处运行
面向对象
Java初生图形界面程序Applet
Java 2 标准版(J2SE):桌面端
Java 2 移动版(J2ME):移动端
Java 2 企业版(J2EE):服务器端
Java发展例如构建工具:Maven,Jekins
应用服务器:Tomcat,Jetty等
Web开发:Struts,Spring,Hibernate,MyBatis
开发工具:Eclipse,Idea等
Hadoop(大数据领域)
Android(手机端)
Java的特性和优势
简单性(没有头文件,指针这些,语法类似于C)
面向对象
可移植性(跨平台)
高性能(即时编译)
分布式(通过URL可以访问网络上的资源,可以通过网络调用方法)
动态性(有反射机制)
多线程(交互更好,比如同时上QQ和打游戏)
安全性(为了满足分布式,需要更大的安全性;会进行内存检查,防止崩溃,还有异常机制)
健壮性
Java三大版本Write Once,Run Anywhere(JVM跨平台)
JavaSE:标准版(桌面程序,控制台开发…)
JavaME: ...
hexo d出现‘can not read a block mapping entry...’问题
hexo部署问题:can not read a block mapping entry.在第一次通过hexo d命令部署时出现了低级问题:
报错说明中应该是说说出在tags处有语法问题,应该用换行加上“-”,同时要注意在每个“:”后面都应该有空格。
集合、数组、列表
挑战五天提升Java水平(1/5)集合
定义:一般来说是由一个或多个元素所构成的整体.
通俗来说集合就是将一组事务组合在一起。
其特点如下:
集合里的元素不一定类型相同
集合里的元素没有顺序这一说法列表
是一种数据项构成的有序序列,按照一定的线性顺序排列而成的数据项的集合
通常我们有数组和链表作为其常见的表现形式,特殊一点的有栈和队列,这些都是数据结构中常见的。
数组
数组是常见的列表的实现方式,他的存储方式是连续的,且具有索引,在编程语言中一般从0开始进行索引。
数组虽然是列表的实现方式但与列表仍然有一定的差别。在Java和C++语言中,数组存储的是具有相同数据类型的元素,而在Python中则不同,其可以存储更多类型,在Python中,数组叫做List。
数组的操作读取数组由于数组的存储方式是连续的,可以将其想象成在一大片方格中进行存储。首先计算机会为了数组申请一片内存,可以用一块方格进行表示,同时计算机会记下索引为0时的地址,这样在通过索引读取的时候就可以计算来判断该位置存储的元素。其时间复杂度为O(1)。
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment