
算法与数据结构
文章平均质量分 51
常见算法与数据结构记录与分享
meteor^_^
这个作者很懒,什么都没留下…
展开
-
剑指offer-03.找出数组中重复的数字
给定一个长度为n的整数数组nums,数组中所有的数字都在0∼n−1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。注意:如果某些数字不在0∼n−1的范围内,或数组中不包含重复数字,则返回 -1;样例给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。 返回 2 或 3。...原创 2021-02-23 22:12:34 · 381 阅读 · 1 评论 -
排列的逆序数
百度百科:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的实际先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序...原创 2020-04-30 09:16:06 · 10132 阅读 · 0 评论 -
十大排序算法概述
图解选择排序(Selection Sort) 图解冒泡排序(Bubble Sort) 图解插入排序(Insertion Sort) 图解希尔排序(Shell Sort) 图解快速排序(Quick Sort) 图解归并排序(Merge Sort) 图解堆排序(Heap Sort) 图解计数排序(Counting Sort) ...原创 2020-04-30 09:25:55 · 298 阅读 · 1 评论 -
图解堆排序(Heap Sort)
堆排序(Heap Sort) 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点...原创 2020-04-29 18:34:58 · 426 阅读 · 0 评论 -
图解桶排序(Bucket Sort)
桶排序(Bucket Sort)桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶的本身必须是保证有序的。算法描述设置一个定量的数组当作空桶; 遍历输入数据,并且...原创 2020-04-29 17:32:43 · 1179 阅读 · 0 评论 -
图解计数排序(Counting Sort)
计数排序(Counting Sort)计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。算法描述找出待排序的数组中最大和最小的元素; 统计数组中每个值为i的元素出现的次数,存入数组C的第i项; 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加); 反...原创 2020-04-29 17:17:44 · 1496 阅读 · 0 评论 -
图解归并排序(Merge Sort)
归并排序(Merge Sort)归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。算法描述把长度为n的输入序列分成两个长度为n/2的子序列; 对这两个子序列分别采用归并排序;...原创 2020-04-29 16:59:45 · 1012 阅读 · 0 评论 -
图解快速排序(Quick Sort)
快速排序(Quick Sort)快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conque...原创 2020-04-29 16:39:38 · 674 阅读 · 0 评论 -
图解插入排序(Insertion Sort)
插入排序(Insertion Sort)插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法描述一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向...原创 2020-04-29 15:25:59 · 745 阅读 · 0 评论 -
K-String拆分K个相同的字符串
#include <stdio.h>#include <stdlib.h>#include <string.h>/*************************************************************************************************如果一个字符串可以被拆分成K个字符串,而且这k个字符串都...原创 2018-02-21 11:10:51 · 792 阅读 · 0 评论 -
字符串匹配KMP算法的理解(详细)
1. 引言本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文。然近期因开了个算法班,班上专门讲解数据结构、面试、算法,才再次仔细回顾了这个KMP,在综合了一些网友的理解、以及算法班的两位讲师朋友曹博、邹博的理解之后,写了9张PPT,发在微博上。随后转载 2018-02-05 20:28:38 · 1632 阅读 · 1 评论 -
图解冒泡排序(Bubble Sort)
冒泡排序(Bubble Sort)算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成。动图演示代码实现void bubbleSort(vector<int> &...原创 2020-04-29 14:05:39 · 338 阅读 · 0 评论 -
图解选择排序(Selection Sort)
选择排序(Selection Sort)选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法描述n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:初...原创 2020-04-28 23:18:58 · 713 阅读 · 0 评论 -
从数组中取出n个元素的所有组合(递归实现)
转自 :https://www.cnblogs.com/shuaiwhu/archive/2012/04/27/2473788.html今天在做POJ 1753时,需要枚举一个数组中所有组合。之前也遇到过类似的问题,如求从n个数组任意选取一个元素的所有组合都是想起来比较简单,但是设计成算法却颇费周折。如数组为{1, 2, 3, 4, 5, 6},那么从它中取出3个元素的组合有哪些,取出4个元素的组...转载 2018-02-16 21:49:25 · 9090 阅读 · 0 评论