左神算法课程笔记

  • 一.认识O(NlogN)的排序
  • 二.详解桶排序及排序内容大总结

一.认识O(NlogN)的排序

①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳

master公式
T [n] = aT[n/b] + T (N^d)
a:子问题个数
b:每次递归是原来1/b的规模
d:除去子问题,剩下的规模解法:
①当d<logb a时,时间复杂度为O(n^(logb a))
②当d=logb a时,时间复杂度为O((n^d)*logn)
③当d>logb a时,时间复杂度为O(n^d)

1.归并排序

①平分两份,左边排好序,右边排好序;
②新开一个辅助空间help,大小为,R-L+1;
③分别从1,M+1开始,较小值放入help;
2T[n/2]+T(N^1) --> d=logb a
O(N*logN)  额外空间:O(N)

2.小和问题

在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。可以看作有n个数>x,就有n个x加在结果res里
还是结合归并排序①平分两份,左边排好序,右边排好序;
②新开一个辅助空间help,大小为,R-L+1;
③分别从1,M+1开始比较左边较小,res+=右边个数*左边数值,左边数值加入help辅助空间右边较小,直接加入辅助空间当左右相等,先放入右边数值进help(如果先放左边进help就不知道右边有多少个数大于它)
④ans=左边小和+右边小和+merge在一起后的小和

3.荷兰国旗问题1

给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求额外空间复杂度0(1),时间复杂度0(N)

①arr[i]<num
arr[i]和小于区的下一个交换,指针L++
②arr[i]>num
arr[i]不动,i++(继续向下判断)

4.荷兰国旗问题2

给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求额外空间复杂度0(1),时间复杂度o(N)

①arr[i]<num
arr[i]和小于区的下一个交换,指针i++
②arr[i]=num
arr[i]不动,i++(继续向下判断)
③arr[i]>num
arr[i]和大于区前一个交换,i不动

5.快排1.0

 ①最后一个数m做基准②arr[i]>m,放左边arr[i]<m,放右边③大于m区的第一个数与m做交换④重复上述三步骤空间复杂度O(N)

6.快排2.0

 ①最后一个数m做基准②arr[i]>m,放左边arr[i]=m,放中间arr[i]<m,放右边③大于m区的第一个数与m做交换④等于m区域就不动,左右两区域继续重复上述三步骤(每次都会处理好一批数)空间复杂度O(N)

7.快排3.0

先随机选一个数作为划分值m
在进行快排2.0空间复杂度O(N*logN)

二.详解桶排序及排序内容大总结

1.堆结构

 把从0开始的数组,对应成一颗完全二叉树01        23    4   5    6i位置 父节点:( i - 1 ) / 2左子树:2 * i + 1右子树:2 * i + 2大根堆,小根堆heapInsert:(新增一数)每加入一个新元素,与其父节点作比较,若大于等于,则交换继续与交换后位置的父节点作比较,直到不大于或来到0位置heapify:(返回并删除最大元素)判断有无孩子如果 较大的孩子 比 此元素 大 则做交换不大于则退出循环heapSort:(堆排序)先做成大根堆然后把0位置上的最大值与heapSize位置的最小值交换heapSize减少1重复此操作时间复杂度O(NlogN)  空间复杂度O(1)(只开辟了有限的几个变量)

2.系统默认小根堆

PeiorutyQueue<Integer> heap=new PriorityQueue<>();

3.对数器

Arrays.sort(arr,new Comparator())punlic void class AComp implements Comparator<Integer>{//返回负数的时候,第一个参数排在前面//返回正数的时候,第二个参数排在前面//返回0的时候,谁在前无所谓@Overridepublic int compare( Student 01, Student o2){return o1.age-o2.age;  }
}

比较器运用在特殊标准的排序上

4.桶排序

①统计数字中最大数有几位(如1228,千位)
②把所有比千位小的数,前面补0
③所有出现过的数字,从0到9,每个出现过的数字当做一个桶
④从个位开始,个位为0放在0号桶,以此类推
⑤把刚才放入桶内的所有数,从左往右倒出(同一桶内,先进先倒出)
⑥个位,十位,百位,千位。。。重复此过程,得到最终排序好的结果

左神算法课程笔记 ①②③④⑤⑥⑦⑧⑨⑩相关推荐

  1. class3 队列、栈和链表(左程云左神算法 初级笔记 2018)

    class 3 用数组结构实现大小固定的队列和栈 package com.godzuo.java;/*** @author quanquan* @create 2020-04-20-22:36*/ p ...

  2. class4 二叉树(左程云左神算法 初级笔记 2018)

    class 4 DAY6 实现二叉树的先序.中序.后序遍历,包括递归方式和非递归方式 package com.godzuo.java;import java.util.Stack;/*** @auth ...

  3. 左神算法课笔记(二):链表、栈和队列、递归Master公式、哈希表、有序表

    单向链表 双向链表 单链表.双链表最简单的面试题 1.单链表和双链表如何反转 package class02;import java.util.ArrayList;public class Code0 ...

  4. 左神算法课笔记(一):时间复杂度、排序、对数器、二分法、异或运算

    我们常说,程序=算法+数据结构.结果光搞框架去了,有点说不过去~ 时间复杂度 常数时间的操作:如果一个操作的执行时间不以具体样本为转移,每次执行时间都是固定时间.称这样的操作为常数时间操作. 数组的寻 ...

  5. 左神算法(一)下修改版

    序言: 此篇内容紧跟在左神算法(一)上修改版之后. 左神算法(一)上修改版 左神算法(一)下修改版 左神算法(二) 七.二叉树的基本算法 1.二叉树 2.二叉树的先序.中序.后序遍历 先序:任何子树的 ...

  6. 左神算法中级班第三课[C++代码]

    左神算法中级班第三课[C++代码] 第一题:流水线打包问题[阿里原题] 代码 第二题 代码 第三题:打印螺旋矩阵 代码 第四题 代码 第五题:判读aim是否在矩阵中 代码 第七题:topK问题 代码 ...

  7. 左神算法笔记01——排序算法

    十大排序算法 选择排序 遍历n次,每次找出i到n-1最小的值,和i位置的值做交换 时间复杂度为o(n²) public static void swap(int[] arr,int i,int j){ ...

  8. 左神算法初级班笔记4:二叉树

    文章目录 01 | 实现二叉树的先序.中序.后序遍历,包括递归方式和非递归 方式 1.递归版本: 2. 非递归版本: 02 | 在二叉树中找到一个节点的后继节点 03 | 介绍二叉树的序列化和反序列化 ...

  9. 左神算法笔记(一)时间复杂度

    时间复杂度 第一节讲解的是时间复杂度问题,所以在这里简单说明一下时间复杂度问题,时间复杂度为代码运行的基于单步时间的长度,时间复杂度在数学层面上为基于极限的一种思考,由于无法得知数据量本身的大小情况, ...

  10. 左神算法基础班4_4_3在二叉树中找到一个节点的后继节点

    Problem: 在二叉树中找到一个节点的后继节点 [题目] 现在有一种新的二叉树节点类型如下: public class Node { public int value; public Node l ...

最新文章

  1. java freemarker 模版_Java模板引擎-FreeMarker
  2. bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道
  3. VirtualBox使用技巧:关于undo差分盘与端口映射
  4. (原创)浅谈任意文件下载漏洞的利用
  5. 单片机编程主函数的特点
  6. javascript学习代码
  7. linux nohup /dev/null,nohup结合/dev/null
  8. Android内存优化之内存泄漏
  9. 最大同性恋交友网站被微软收购,我不服!
  10. java 二分查找_JAVA 实现二分查找算法。我知道你会,但没你想象的那么简单
  11. 微软 Windows 10 S 之心不死!
  12. 服务器使用nginx做代理,通过HttpServletRequest获取请求用户真实IP地址
  13. python新手入门到大师_GitHub - FainBleeze/Python-100-Days: Python - 100天从新手到大师
  14. uniapp 学习笔记三十 结算页面结构搭建地址列表页面结构搭建
  15. Macbook外接windows键盘,设置快捷键
  16. flex 随机数产生方法
  17. 基于OBD的量产车评估(PVE)测试方法
  18. 以自己的电脑作为服务器,搭建网站,外网可访问
  19. 框架流程图绘制工具OmniGraffle 7 for Mac
  20. PyQt5 结合 OpenCV 的开发之旅

热门文章

  1. module ‘fiona‘ has no attribute ‘_loading‘
  2. 【计算机毕业设计】294火车票订票系统
  3. C++ 模板沉思录(下)
  4. RFC2046 多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))
  5. pdf转换成word免费版网页版哪个好?有这个网站就够了
  6. 区块链+公共安全 大有可为
  7. 手机如何联系计算机应用基础,国家开放大学学习指南计算机应用基础网上作业答案完整版(手机版)...
  8. IOS混合应用切换app闪屏bug总结
  9. 长页面招聘H5,帮你低成本高效招聘优质人才
  10. Day4: Jupyter 主题修改