随笔分类 - 算法
摘要:保证每次入栈元素都位于队列开始处,出栈时直接去取队列开始处的元素即可
阅读全文
摘要:数学表达式的数值支持小数,符号只支持+ - * / ( )这几种。先将数学表达式的字符串(中缀表达式)转化为**后缀表达式**,然后计算后缀表达式的值。例:中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+”。
阅读全文
摘要:算法代码:index = (index + 1) % arr.Length; 算法实现:记录目标数组及当前索引,当前索引初始值为-1;当前索引=(当前索引 + 1) 取模;访问目标数组内当前索引位置的值。
阅读全文
摘要:算法实现:利用格式化输出把数字中间按顺序插入大写字母,把相邻的大写字母替换为空字符,最后把数字和字母替换成中文(字母替换为数字的十进制数位的中文名称)。
阅读全文
摘要:CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
阅读全文
摘要:反转一个字节说的是位序反转,别将它和大端转小端混淆了,所谓大端和小端指的是字节序。
字节位序反转的实现算法很多,就是看看谁的算法效率更高了。
阅读全文
摘要:二分查找(英语:binary search),也叫折半查找(英语:half-interval search),是一种在有序数组中查找特定元素的搜索算法。所以,二分查找的前提是数组必须是有序的。
二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。因此,二分查找特别适用于那种一经建立就很少改动、而又经常需要查找的线性表。
对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。链表上无法实现二分查找(更准确的说链表上使用二分查找得不偿失)。
阅读全文
摘要:BitMap的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此可以大大节省存储空间。
BitMap可以看成一种数据结构。
阅读全文
摘要:分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。
Snowflake ID组成结构:正数位(占1比特)+ 时间戳(占41比特)+ 数据中心(占5比特)+ 机器ID(占5比特)+ 自增值(占12比特)。
第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)一共加起来刚好64位,为一个Long型(转换成字符串长度为18)。
阅读全文
摘要:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。最差时间复杂度 O(n²),最优时间复杂度 O(n) ,平均时间复杂度 O(n²)。
阅读全文
摘要:斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)。
阅读全文
摘要:Knuth-Durstenfeld Shuffle->每次从未处理的数据中随机取出一个数字,然后把该数字放在数组的尾部,即数组尾部存放的是已经处理过的数字。
阅读全文
摘要:算法代码:result=(total-1)/size+1 //total:总记录数,size:每页记录数,result:分页总页码
阅读全文
