算法&数据结构学习笔记
N3verL4nd
中年老男人~
展开
-
你真的会二分查找吗?
最简单的二分查找算法:即找到返回下标,找不到返回-1,(坐标范围:0~nums.size() - 1)#include #include #include #include #include #include #include #include using namespace std;int BinarySearch(vector& nums, int target)原创 2016-10-30 23:11:29 · 582 阅读 · 0 评论 -
KMP匹配算法学习笔记
KMP匹配算法假如,A="abababaababacb",B="ababacb",我们来看看KMP是怎么工作的。我们用两个指针i和j分别表示,A[i - j + 1..i]与B[1..j]完全相等。也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符(j当然越大越好),现在需要检验A[i + 1]和B[j + 1]的关系原创 2013-05-03 21:43:38 · 860 阅读 · 0 评论 -
树状数组学习笔记
【引言】 在解题过程中,我们有时需要维护一个数组的前缀和S[n]=A[1]+A[2]+...+A[n]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。 当n非常大时,程序会运行得非原创 2013-05-18 11:17:07 · 2363 阅读 · 6 评论 -
树状数组求逆序数
树状数组的简介见: http://blog.csdn.net/x_iya/article/details/8943264什么是逆序数?在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序数的总数就是这个排列的逆序数。原创 2017-09-11 13:36:23 · 357 阅读 · 0 评论 -
数据离散化
离散化:把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。例如: 原数据:1,999,100000,15 离散化后:1,3,4,2如果我们关注的不是数据本身的大小,而是数据的相对大小,则可以使用离散化处理。实现: 把N个大小不确定的数映射到1-N的数列上:package study;import java原创 2017-09-11 14:01:18 · 876 阅读 · 0 评论 -
二叉树的建立与遍历(Java版本)
前序遍历:若二叉树为空,则算法结束,否则:访问根结点;前序遍历根结点的左子树;前序遍历根结点的右子树。中序遍历:若二叉树为空,则算法结束;否则:中序遍历根结点的左子树;访问根结点;中序遍历根结点的右子树。后序遍历:若二叉树为空,则算法结束,否则:后序遍历根结点的左子树;后序遍历根结点的右子树;访问根结点。层次遍历广度优先遍历二叉树(层序...原创 2018-03-20 10:37:22 · 1449 阅读 · 0 评论 -
排序算法学习笔记
冒泡排序比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。package study;import java.util.Arrays;import j...原创 2017-09-10 20:51:51 · 303 阅读 · 0 评论 -
快速选择算法
QuickSelect 的思想与 QuickSort 基本一致。 每次 partition() 结束后可得知 pivot 的位置,自然也就知道 pivot 前后各有多少小于、大于 pivot 的元素。选择时,第 k 大的元素必然只存在于 pivot 的左边或者右边。如果 pivot 前的元素数量多于 k,则说明左边有多于 k 个元素小于 pivot,所以第 k 大的元素必然在左边,可在左边...原创 2017-09-24 17:00:18 · 906 阅读 · 0 评论