快速排序/归并排序/前缀和/差分/二分查找/高精度

快速排序:

                1.设置中间值(一般取(l+r)/2)如果为整数型则是(l+r)>>2向右移位是除以2;

                2.双指针,int i,int j  如果是升序,i找大于中间值的,j找小于中间值的

                3.递归操作,不停的划分为小的左右子区间来重复上述操作

              


  • 双指针

例题:最长字符串

kmp算法的应用

分别定义一个i j指针 for(int i=0,j=0;i<n;i++)

首先j不动  i不停的加  不停的更新最长的值(用res接收) 

直到有i和j指向的元素相同时候 让j不停的向i靠近

直到i==j 继续重复上述 i不停的加  不停的更新最长的值(用res接收)

i和j相同元素的判别:定义一个数组让其记录i和j指向的位置的元素出现的次数,若>1则说明不止一次出现

此时i和j这个区间的最大值已经用res接收完,记录下个区间就让j移动到i继续上述算法的实现,并且j移动的过程中将记录元素出现的次数都减为0; 


  • 位运算

lowbit:这个数最后一个1的二进制在什么位置;

int n=10   ->  n n&-n;

求x的第n位 x>>n&1;(二进制);


  • 前缀和

一开始输入数列数组的时候开另一个数组:开前缀和的数组保存数列的前缀和

比如说求一个数列其中区间的数组,如果暴力求就是o(n)的时间复杂度

但是输入数列数组的过程中同时开一个前缀和数组保存当前这个数之前的前缀和;

s[i]=s[i-1]+a[i];数组是从1开头,数组定义在全局变量默认s[0]==0;

前缀和数组再求区间和就是o(1)的时间复杂度 比如说求l 和 r 之间的数的和就是 s[r]-s[l-1];


未完待续

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值