学习笔记1
来源:互联网 发布:风险矩阵法优缺点 编辑:程序博客网 时间:2024/06/05 15:23
1.字符串原地逆序(使用临时变量)
void reverse(string &s){ for(int i=0,j=s.size()-1;i<j;++i,--j) { char tmp=s[i]; s[i]=s[j]; s[j]=tmp; }}
2.字符串原地逆序(不使用临时变量)
void reverse(string &s){ for(int i=0,j=s.size()-1;i<j;++i,--j) { s[i]^=s[j]; s[j]^=s[i]; s[i]^=s[j]; }}
3.单词逆序
void reverseWord(string &s,int p,int q){ for(;p<q;++p,--q) { s[p]^=s[q]; s[q]^=s[p]; s[p]^=s[q]; }}void reverseSentence(string &s){ int i=0,j=0,n=s.size(); while(j<n) { if(s[j]!=' ')++j else { reverseWord(s,i,j-1); i=++j; } } reverseWord(s,i,j-1); reverseWord(s,0,n-1);}
4.荷兰国旗问题
int f(int *A,int n){ int i=0,j=0,k=n-1; while(j<=k) { if(A[j]==0)swap(A[i++],A[j++]); else if(A[j]==1)j++; else swap(A[j],A[k--]); } }
5.求平均值(避免溢出)
int f(int x,int y){ return (x&y)+((x^y)>>1);}
bool Young(int a[m][n],int x){ for(int i=0,j=n-1;i<m&&j>=0;) { if(a[i][j]<x)++i; else if(a[i][j]>x)--j; else return true; } return false;}
string decimalToHexadecimal(unsigned n) { if(n==0)return "0"; string s="0123456789abcdef",res; while(n) { res=s[n&15]+res; n>>=4; } return res;}
8.Google面试题:你拿着两个鸡蛋站在m层的大楼上。鸡蛋或许结实到从楼顶掉下也不会摔破,或许很易碎,在一楼摔下就破碎。最少试验多少次可以找出鸡蛋不会被摔碎的最高楼层?
解:设最少试验n次可以找出鸡蛋不会被摔碎的最高楼层。n(n+1)/2>=m。当m=100时,n>=14。
解:设最少试验n次可以找出鸡蛋不会被摔碎的最高楼层。n(n+1)/2>=m。当m=100时,n>=14。
9.字符串压缩
string compression(string s){ string res; if(s.size()==0)return res; int i=0,j=0; while(j<s.size()) { if(s[i]==s[j])++j; else { if(j-i>1)result+=j-i+'0'; result+=s[i]; i=j; } } if(j-i>1)result+=j-i+'0'; result+=s[i]; return result;}
10.求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
int f(int n) { int num=0; n&&(num=f(n-1)+n); return num; }
int f(int n) { int num=0; !n||(num=f(n-1)+n); return num; }
11.a的n次方
时间复杂度为O(logn)
double pow(double a,unsigned n) { double y=1,f=a; while(n) { if(n&1)y*=f; n>>=1; f*=f; } return y; }
12.埃拉托斯特尼筛法
bool isPrime(int n){ if(n<2)return false; for(int i=2;i*i<=n;i++) { if(n%i==0)return false; } return true;}//vector<bool> A(n+1,true);void EratosthenesSieve(vector<bool> &A,int n){ for(int i=2;i*i<=n;i++) { if(A[i]) { for(int j=i*i;j<=n;j+=i)A[j]=false; } } }
13.写一个去除字符串左边空格,右边空格,字符串中间如果出现多个空格,则合并成一个空格的程序。例如,输入“ a b c ”,则输出“a b c”。
void f(char *s){int i=0,j=0;while(s[j]!='\0'){while(s[j]!='\0'&&s[j]==' ')++j;if(s[j]=='\0')s[i-1]='\0';while(s[j]!='\0'&&s[j]!=' ')s[i++]=s[j++];if(s[j]=='\0')s[i]='\0';else s[i++]=' ';}}14.字符串包含
bool contain(string s,string t){int hash=0;for(int i=0;i<s.size();++i)hash|=(1<<(s[i]-'A'));for(int i=0;i<t.size();++i){if(hash&(1<<(t[i]-'A'))==0)return false;}return true;}
0 0
- [笔记]JavaScript学习笔记(1)
- 算法笔记 ---- 学习笔记 1
- c++学习笔记学习笔记1
- 机器学习-学习笔记1
- 学习笔记:git学习1
- 机器学习学习笔记1
- VC++学习笔记1
- c#学习笔记(1)
- OPENGL学习笔记1
- FCS学习笔记1
- WTL学习笔记(1)
- oracle8i学习笔记(1)
- UML学习笔记1
- JAVAGUIDE(学习笔记1)
- UML学习笔记(1)
- applet学习笔记1
- Expect学习笔记(1)
- linux学习笔记(1)
- printf("XXX" "YYYY"... "ZZZZ", ...) is OK
- jQuery整理笔记六----jQuery动画
- tableview 编辑整理
- 浏览器的标准模式与怪异模式的设置与区分方法
- jQuery整理笔记七----几个经典表单应用
- 学习笔记1
- git diff
- Oracle中rowid与rownum的区别
- 如何解决Warning: Disabling Linux Accessibility Bridge: DBus is missing?
- myeclipse 打开struts 2 配置文件struts.xml报错问题的解决 undefined actionname parameter
- Tint color of existing iOS controller
- 如何将Debug文件夹下的资源打包成一个EXE文件直接执行
- AngularJs 学习资料
- 微信分享内容修改