
Golang数据结构与算法
啤酒味的大白兔
一个Go语言学习者
展开
-
异或运算的算法应用
如果有两个出现奇数次的数时也可使用这种方法,同样所有数据进行^运算,那么最终的结果绝对就是这两个出现奇数次的数进行的^运算,其中的1都是两个数直接二进制码不同之处,那么根据这个区别,去除这个结果的左右边一个1,那么这个位置上的1在这两个奇数次数中只用一个满足,那么就让所有数和这个最右边的1进行&运算,如果结果不为0,说明该数字这个位置上有1,然后将所有满足条件的数进行^运算即可,偶数次数直接^运算为零,剩下来的就是其中一个奇数,具体看代码。找出一个数组中出现奇数次的那个数,前提是其他数都是出现偶数次。原创 2023-03-19 21:00:40 · 84 阅读 · 0 评论 -
二分查找。
last在其右边,不需要改变,只用改变first即可,first= middle+1。此例中num要大于middle,则继续二分,middle右边的数即可。在有序数组中寻找num,我们采用二分查找的方法,更加便捷。假如一个有序数组 1,2,3,4,5,6,7,8,9。如果比middle大,则num一点在其右边,反之亦然。中间坐标middle=(first+last)/2。然后判断坐标为middle的数(5)和num的大小。寻找数组中>=num最左的位置同样的道理。寻找数组中原创 2023-03-19 17:24:39 · 57 阅读 · 0 评论 -
前缀和数组
当需要求数组中某连续几项和时可用这个方法,通过先构建前n项和组成新切片,然后通过相减操作即可实现指定连续几项和。时间复杂度为O(1)原创 2023-03-19 17:03:48 · 56 阅读 · 0 评论 -
算法:排序
先以两个为一组,依次增加,一次加一个数进来,每次保证正序。一个一个比较,将最小或最大的数据依次归位。在比较的同时进行交换移动(冒泡)时间复杂度都为O(N^2)插入排序常数时间最好。原创 2023-03-17 19:57:31 · 55 阅读 · 0 评论 -
算法复杂度
时间复杂度是算法流程的常数操作总量与样本数量之间的表达式关系,该表达式只看最高阶的部分最好、平均、最差三种时间复杂度评价方式。但除此之外,你的流程如果还需要开辟空间才能让你的流程继续下去。你要实现一个算法流程,在实现算法流程的过程中,你需要开辟一些空间来支持你的算法流程。你还要去在具体的运行时间上拼优劣,就进入到拼常数时间的阶段,简称拼常数项。:如果一个操作的执行时间不以具体样本量为转移,每次时间都是固定的时间。我们会发现,时间复杂度这个指标,是忽略低阶项和所有常数系数的。时间复杂度只是一个很宏观的指标。原创 2023-03-17 19:51:43 · 55 阅读 · 0 评论 -
数据结构(字符串)
字符串是由若干字符组成的序列。由于字符串在编程时使用的频率非常高,为了优化,很多语言都对字符串做出了特殊的规定原创 2022-12-17 15:55:55 · 114 阅读 · 0 评论 -
数据结构(数组)
数组可以说是一种最简单的数据,它占据一块连续的内存并按照顺序存储数据。创建数组时,我们需要首先指定数组的容量大小,然后根据大小分配内存。因此数组的空间效率不是很好,经常会有空闲的区域没有得到充分的利用。原创 2022-12-14 20:19:12 · 147 阅读 · 0 评论