![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
忆江南的博客
精通iOS开发
展开
-
hashmap实现
hashmap里面有个数组(桶),数组中的保存的是双向链表或者红黑树。要保存一个值,通过hash函数求出索引,然后添加到这个链表上,如果链表过长或者hashmap中的元素过多,会进行扩容或者由链表进化成红黑树。取出元素也是一样的通过hash函数,求出索引,找到桶,然后通过key比较对比,找到对应的value。因为元素数量过多时会对数组进行扩容,所以复杂度是O1二分查找要求元素可以随机访问,所以决定了需要把元素存储在连续内存。这样查找确实很快,但是插入和删除元素的时候,为了保.原创 2020-06-03 11:07:38 · 524 阅读 · 0 评论 -
常用排序算法总结(二)
目录计数排序基数排序桶排序 上一篇文章中我们总结了常用的比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 这篇文章中我们来探讨一下常用的非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。 这里我们用到的唯一数据结构就是数组,当然我们也可以利用链表来实现下述算法。 计数排序(Counting Sort) ...转载 2018-07-02 10:54:46 · 150 阅读 · 0 评论 -
常用排序算法总结(一)
目录冒泡排序 鸡尾酒排序 选择排序插入排序二分插入排序 希尔排序 归并排序堆排序快速排序 我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时间复杂度可以达到O(n),...转载 2018-07-02 10:54:05 · 126 阅读 · 0 评论 -
LeetCode算法题典
LeetCode算法题典 LeetCode是一个准备面试非常有用的网站,是非常值得去的地方,里面都是一些经典的面试题,这些题目在Google,Microsoft,Facebook,Yahoo等大型互联网公司面试题中出现过,并且题目分为易,中,难三等,也按专题进行了分类,做题时可以根据自己的喜好进行。本人现在正在LeetCode上进行做题练习,并且将做的过程记录下来,供自己以后复习和大转载 2017-05-15 21:30:41 · 1035 阅读 · 0 评论 -
【剑指Offer学习】【所有面试题汇总】
剑指Offer学习 剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流!所有代码下载【https://github.com/Wang-Jun-Chao/coding-interviews】目录第01-10题【剑转载 2017-05-15 21:29:46 · 1389 阅读 · 0 评论 -
二叉树深度优先遍历、广度优先遍历、非递归遍历算法
二叉树的遍历:D:访问根结点,L:遍历根结点的左子树,R:遍历根结点的右子树。给定一棵二叉树的前序遍历序列和中序遍历序列可以惟一确定一棵二叉树。二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。深度优先遍历二叉树。1. 中序遍历(LDR)的递归算法:若二叉树为空,则算法结束;否则: 中序遍历根结点的左子树; 访问根原创 2017-05-23 11:12:27 · 671 阅读 · 0 评论 -
【剑指Offer学习】【所有面试题汇总】
版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]剑指Offer学习 剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流!所有代码下载【https://github.com/Wang-Jun-Ch转载 2017-05-23 10:22:56 · 2035 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点。
输入一个链表,输出该链表中倒数第k个结点。代码思路如下:两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。。/*public class ListNode { int val; ListNode next =原创 2016-09-18 17:49:58 · 297 阅读 · 0 评论 -
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。//思路//1:从前往后插入,这样移动·的次数多不建议//2:从后往前插入class Solution {public:void replaceSpace(char *str,int原创 2016-09-18 17:14:29 · 5063 阅读 · 1 评论 -
外排序
外排序方法介绍所谓外排序,顾名思义,即是在内存外面的排序,因为当要处理的数据量很大,而不能一次装入内存时,此时只能放在读写较慢的外存储器(通常是硬盘)上。外排序通常采用的是一种“排序-归并”的策略。在排序阶段,先读入能放在内存中的数据量,将其排序输出到一个临时文件,依此进行,将待排序数据组织为多个有序的临时文件;尔后在归并阶段将这些临时文件组合为一个大的有序转载 2015-09-24 15:34:47 · 377 阅读 · 0 评论 -
程序员编程艺术:第十章、如何给10^7个数据量的磁盘文件排序
作者:July,yansha,5,编程艺术室。出处:http://blog.csdn.net/v_JULY_v 。 前奏 经过几天的痛苦沉思,最终决定,把原程序员面试题狂想曲系列正式更名为程序员编程艺术系列,同时,狂想曲创作组更名为编程艺术室。之所以要改名,我们考虑到三点:1、为面试服务不能成为我们最终或最主要的目的,2、我更愿把解答一道道面试题,ACM题等各类程转载 2015-09-24 16:41:47 · 658 阅读 · 0 评论 -
八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,转载 2015-09-25 16:33:57 · 1499 阅读 · 0 评论 -
详解KMP算法
http://www.cnblogs.com/yjiyjige/p/3263858.htmlKMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己转载 2015-08-07 15:02:35 · 1159 阅读 · 0 评论 -
[经典排序算法][集锦]
http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html经典排序算法 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教大多数排序算法都给出了每一步的状态,以方便初学者更容易理解,通俗易懂,部分难以理解的排序算法则转载 2015-07-20 19:47:53 · 323 阅读 · 0 评论 -
十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
http://blog.csdn.net/jnu_simba/article/details/9705111首先声明一下,本文只对十种排序算法做简单总结,并参照一些资料给出自己的代码实现,并没有对某种算法理论讲解,更详细的了解可以参考以下资料(本人参考):1、《data structure and algorithm analysis in c 》2、《大话数据结构转载 2015-07-20 19:42:28 · 644 阅读 · 0 评论 -
深究递归和迭代的区别、联系、优缺点及实例对比
http://blog.csdn.net/laoyang360/article/details/78558601.概念区分递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限转载 2015-08-10 13:10:25 · 1081 阅读 · 0 评论 -
人脑理解递归
递归真是个奇妙的思维方式。自打我大二学习递归以来,对一些简单的递归问题,我总是惊叹于递归描述问题和编写代码的简洁。但是总感觉没能融会贯通地理解递归,有时尝试用大脑去深入“递归”,层次较深时便常产生进不去,出不来的感觉。这种状态也导致我很难灵活地运用递归解决问题。有一天,我看到一句英文:“To Iterate is Human, to Recurse, Divine.”中文译为:“人理解迭代,神理解转载 2015-08-10 10:57:35 · 410 阅读 · 0 评论