算法基础l78z
free-dancer
i am growing~!
展开
-
关于lowbit
lowbit(i)的意思是将i转化成二进制数之后,只保留最低位的1及其后面的0,截断前面的内容,然后再转成10进制数。即lowbit(i) = i&(-i)。参数x为有符号整型数,-x通过求补码获得比如,x=6,及二进制数0110,那么按照补码求法,-x的值为1001+1=1010接着,x&-x,结果等于0010,作为函数的返回值可见该函数的作用是:返回x的最后一个为“1”的bit位的位置。将 x转载 2017-08-16 23:00:19 · 721 阅读 · 0 评论 -
二分查找第一个比k大的数
在这里我们可以直接二分,或者更方便的我们有一个函数 lower_bound(a,a+num,val);1.直接二分的方法int binary(int val,int a[],int l,int r){ int m; int id; while(l<=r) { m=l+(r-l)/2; //避免溢出 if(a[m]>val) { id=原创 2017-09-21 23:43:14 · 4237 阅读 · 2 评论 -
KMP算法
下面来总结一下用来匹配字符串的KMP算法,以及怎么求next数组。当然我们可以用笨办法可以进行字符串匹配和求next数组,但是学习算法不就是追求极致的过程么?通过参考https://blog.csdn.net/sun20209527/article/details/79933237,可以通透的理解KMP是个什么过程,但细节处理和他会有些出入。举例来说,有一个字符串"BBC ABCDAB...原创 2018-10-05 21:48:01 · 186 阅读 · 0 评论 -
环形子数组的最大和
显然是求最大字段和的升级版啊!题意:就是给你些数,构成一个首位接应的环,然后求出最大子数组的和!给几个实例把:示例 1:输入:[1,-2,3,-2]输出:3解释:从子数组 [3] 得到最大和 3示例 2:输入:[5,-3,5]输出:10解释:从子数组 [5,5] 得到最大和 5 + 5 = 10示例 3:输入:[3,-1,2,-1]输出:4解释:从子数组 ...原创 2018-10-08 22:46:25 · 1119 阅读 · 0 评论