leetcode 003 题目 思路 想到ascii码表一共就256个字符,遍历时每次标记就行了 123456789101112131415161718192021class Solution {public: bool vis[300]; int len=0; int ans=0; int lengthOfLongestSubstring(string s) { 2019-04-14 算法 字符
快速幂+快速乘 快速幂+快速乘 求 $(a^b)\bmod p$ $1<=a,b,p<=10^9$ 快速幂直接过当 $1<=a,b,p<=10^{18}$ 快速幂中间一步相乘会爆,用快速乘就行 12345678910111213141516171819202122232425#include<iostream>using namespace std;//1<= 2019-04-13 算法 快速幂
二分 整数域2种边界[l,r] (左闭又闭 容易理解最好用)12345678910111213#include<iostream>using namespace std;int main(){ int l,r; int n; cin>>n; while(l<=r){ int mid=(l+r)>>1; 2019-04-11 算法 二分
前缀和与差分 一维前缀和 从数组第一个开始累加 1s[i]=s[i-1]+a[i] 求区间[l,r]的和,O(1)复杂度 sum=s[r]-s[l-1] 二维前缀和 递推 s[i][j]=s[i][j]-s[i-1][j]-s[i][j-1]+s[i-1][j-1] 例题:激光炸弹 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标。现在地图上有n(n≤10000)个目标,用整数xi, 2019-04-10 算法 前缀和与差分
最短Hamilton路(二进制状态压缩) 二进制状态压缩二进制数的最低位从0开始计数操作 | 实现—|—取出第k位 | $(n>>k)&1$取出第0-(k-1)位 | n& ( (1<<K)-1 )n的二进制数第k位取反 | n^(1<<K)n的二进制数第k位赋值为1 | n|(1<<k)n的二进制数第k位赋值为0 | n&(~1<<K 2019-04-09 算法 二进制状态压缩
lowbit() lowbit 运算 定义:自低位的1及其后面所有位为0构成的数值 例如:n=10= $(1010)_2$ ans=10 推导:设 n>0 且k位为1,第0~k-1为都为0先取反在+1 包括最高位n1=10010000n2=01101111n3=01110000an=00010000 ans=n&(~n+1) 看数值大小还是看原码正数原码取反+1(正 2019-04-07 算法
位运算基础 位运算 时间 2019年4月7日 星期日 17:22:41 左移$$1<<n=2^n$$ $$n<<1=2n$$ 很好理解 右移$$1>>n$$ 开方$$n>>1=|n/2|$$ 向下取整 123-3>>1=-2 3>>1=1 c++中是向0取整 -3/2=-1(|-1.5|) 2019-04-07 算法 位运算
汉诺塔问题理解 汉诺塔问题A,B,C三个柱子,A盘子上有64个盘子,盘子按照从小到大堆放,将A中所有盘子移到C柱,每次只能移一个盘子,小盘子只能放在大盘子上面,问最少移动几次能将A柱前n个盘子移动到C盘? 属于递归问题 n=1 移动一次 n=2 移动三次 三次分别包括A堆前(n-1)个移到B堆 A堆第n个移动到C堆 B堆的(n-1)个移动到C堆 分解(n-1)个盘子的移动需要的次数 n= 2019-04-04 算法