算法学习

1、算法可以让代码可行、高效、低占用资源 明白代码底层逻辑,方便使用和阅读
2、算法基本要素/特性:输入、输出、有穷性、确定性、可行性
3、学习方法:多看,多练,多思考


算法刷题.png

时间复杂度.png

二分法查找算法注意事项:
1、先决条件 :有序数组(后面大于前面) 链表不适合二分法
2、 注意数据类型是有范围的才用L+(R-L)/ 2表达式更合适
3、注意 start = mid+1 和end = mid -1防止死循环
4、数据量不可过大
数组:连续存放,便于查找 链表:不要求连续,结点后面需要添加下一个结点的首地址,缺点:不便于查找


链表和数组时间复杂度比较.png

数组和链表的选择.png

线性表:里面的数据以线性关系排列,数据一旦存放,其位置就不变
顺序表:连续存放 数组(地址连续,类型相同),引用数组,动态数组
数组元素的位置称为索引,利用所以可以计算出元素对应的存储地址,索引从0开始
数组支持直接访问
引用数组:解决了数据类型必须一致的问题
动态数组:list(Python), ArrayList(java),用空间换取时间, 提供更多的存储空间
链表常见面试题:


链表常见面试题.png

1,4,5,8面试常见
栈和队列(保存临时数据)
栈:先进后出LIFO(栈看成一个桶,往桶里面放东西),队列:先进先出FIFO(队列看成一个管,向管里注水)


栈的操作

队列操作

双端队列

双端队列操作

栈和队列常考题

栈常见题型.png

初级排序算法:
选择排序:
不断遍历数组,选择数组中最小值的元素,放在数组前面最小元素后面,如果是第一个元素最小,就不变,后面依次选择最小数排在后面。

特点:运行时间和输入无关,数据移动最少,时间复杂度O(n**2),空间复杂度O(1)

冒泡排序:
从头开始选择相邻两个元素进行比较,如果前面大于后面,则交换位置,一直到最后一个元素,最后一个元素为最大数。除最后一个元素外,针对其他元素,进行重复操作,直到剩下最后一个数,没有任何数字比较。
特点:运行时间和输入无关,时间复杂度为O(n**2),空间复杂度为O(1)

插入排序:
从第一个元素开始,该元素视为已经排序,取出下一个元素,与排好序的元素进行比较(从后向前比较),如果新元素小于排好序的元素,则把新元素插入到该元素位置,该元素移动到下一个位置,重复插入操作,如果找到已排序的元素小于等于新元素时,把新元素插入到该位置后,重复步骤,直到排序结束
特点:数组中每个 元素距离他最终位置都不远,一个有序的大数组接一个小数组,数组中只有几个元素的位置不正确,很快速

希尔排序:
把待排序的数组分为若干组,让然后每个组内进行插入排序操作,再对已经排好序的组进行插入排序操作。
特点:各个子数组都很短,排序后子数组都是部分有序的 ,最坏时间复杂度根据步长序列不同而不同,目前已知最好的是O(nlog 2 n),最优时间复杂度是O(n)
希尔排序采用3H+1方式分组 H 从0开始取值

归并排序算法:主要采用分治法(按照数组下标将数组拆分成左右两个长度相等的小数组),所谓分治法就是把原问题分解成若干个可以解决的简单问题,可以直接求解,原文的解就是若干子问题解的合并。分治三步骤:分解、解决、合并问题。
五大常用算法思想: 分治、动态规划、贪心、回溯、分支界定
归并排序时间复杂度为O(nlog n)
归并排序优化:使用插入排序处理规模较小的子数组,提高时间

快速排序:核心思想(分治),按照某一个元素的大小将数组拆分成左右两部分
主要步骤就是选取一个元素作为基准值,将数组中小于基准值的元素排在基准值前面,大于基准值的排在后面(分割操作),递归地把小于基准值的子数列和大于基准值的子数列排序。
注:何为递归:程序调用自身的编程技巧称为递归( recursion)在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。 递归和循环的区别:循环是有去无回,递归式有去有回
举个栗子,你用你手中的钥匙打开一扇门,结果去发现前方还有一扇门,紧接着你又用钥匙打开了这扇门,然后你又看到一扇们..但是当你开到某扇门时,发现前方是一堵墙无路可走了,你选择原路返回——这就是递归
但是如果你打开开一扇门后,同样发现前方也有一扇们,紧接着你又打开下一扇门..直到打开最后一扇门出去,或者一直没有碰到尽头(死循环)——这就是循环。

归并排序例子

原地快速排序

基本思路

快速排序时间复杂度

快速排序优化:小数组时,切换到插入排序;三取样区分:取三个数,选取中间的那个数作为基准值

三向切分快速排序

三向切分快速排序步骤

排序后

双基准值快速排序
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容