笔记IT面试.docx
- 文档编号:2791196
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:32
- 大小:100.99KB
笔记IT面试.docx
《笔记IT面试.docx》由会员分享,可在线阅读,更多相关《笔记IT面试.docx(32页珍藏版)》请在冰豆网上搜索。
笔记IT面试
1一个数组,下标从0到n,元素为从0到n的整数。
判断其中是否有重复元素
1.先排序,后判断相邻两数是否相等
2.判断n是奇数还是偶数,若为偶数,则k=(n+1)/2,若为奇数,则k=n/2+1扫苗一遍,统计比k小的数的个数是否是总数组长度的一半;【不改变数组,占用一个额外空间】
3.扫描一遍,扫描到a[i]时,判断a[i]是否已经被处理过了,没有被处理则而且a[i]!
=I,那么就考察a[a[i]]是否被处理,若没有被处理则a[i]=a[a[i]],a[a[i]]=-1,表示a[a[i]]已被处理。
[不需要额外空间,但改变了原数组]。
boolhasDuplicate(inta[],intn)
{
intk;
for(inti=0;i<=n;i++)
{while(a[i]!
=-1&&a[i]!
=i)
{if(a[a[i]]==-1)
returntrue;
k=a[i];//这个要注意
a[i]=a[a[i]];
a[k]=-1;
}
if(a[i]==i)
{a[i]=-1;}
}
returnfalse;
}
2平面上N个点,没两个点都确定一条直线,求出斜率最大的那条直线所通过的两个点
1.先把N个点按x排序。
2.斜率k最大值为max(斜率(point[i],point[i+1])) 0<=i 复杂度Nlog(N)。 以3个点为例,按照x排序后为ABC,假如3点共线,则斜率一样,假如不共线,则可以证明AB或BC中,一定有一个点的斜率大于AC,一个点的斜率小于AC。 3strcpy只能处理字符串;如果拷贝带有特殊字符的串,就只能用memcpy或memmove。 memcpy和memmove功能基本上差不多,但是当源串和目标串有Overlap时,memmove可以正确处理,memcpy则不行 Memset把buffer所指内存区域的前count个字节设置成字符c。 说明: 返回指向buffer的指针。 用来对一段内存空间全部设置为某个字符。 void*memcpy(void*dst,constvoid*src,size_tcount); void*memmove(void*dst,constvoid*src,size_tcount); externvoid*memset(void*buffer,intc,intcount); void*__cdeclmemcpy(void*dst,constvoid*src,size_tcount) { void*ret=dst;while(count--) { *(char*)dst=*(char*)src;dst=(char*)dst+1;src=(char*)src+1; } return(ret);} // 十进制转换为二进制,十进制数的每1bit转换为二进制的1位数字 char *int_to_bin(unsigned long data) { int bit_num = sizeof(unsigned long) * 8; char *p_bin = new char[bit_num+1]; p_bin[bit_num] = '\0'; for (unsigned int i = 0; i < bit_num; ++i) { p_bin[i] = data << i >> (bit_num-1); if (p_bin[i] == 0) p_bin[i] = '0'; else if (p_bin[i] == 1) p_bin[i] = '1'; else p_bin[i] = 'a'; } return p_bin; } // 十进制转换为十六进制,十进制数的每4bit转换为十六进制的1位数字 char *int_to_hex(unsigned long data) { int bit_num = sizeof(unsigned long) * 8; char *p_hex = new char[sizeof(unsigned long)*8/4+3]; p_hex[0] = '0'; p_hex[1] = 'x'; p_hex[bit_num/4+2] = '\0'; char *p_tmp = p_hex + 2; for (unsigned int i = 0; i < bit_num/4; ++i) { p_tmp[i] = data << (4*i) >> (bit_num-4); if (p_tmp[i] >= 0 && p_tmp[i] <= 9) p_tmp[i] += '0'; else if(p_tmp[i] >= 10 && p_tmp[i] <= 15) p_tmp[i] = p_tmp[i] - 10 + 'A'; } return p_hex; } //十进制转换为二进制,十进制数的每1bit转换为二进制的1位数字 char*int_to_bin(unsignedlongdata) { intbit_num=sizeof(unsignedlong)*8; char*p_bin=newchar[bit_num+1]; p_bin[bit_num]='\0'; for(unsignedinti=0;i { p_bin[i]=data<>(bit_num-1); if(p_bin[i]==0) p_bin[i]='0'; elseif(p_bin[i]==1) p_bin[i]='1'; else p_bin[i]='a'; } returnp_bin; } //十进制转换为十六进制,十进制数的每4bit转换为十六进制的1位数字 char*int_to_hex(unsignedlongdata) { intbit_num=sizeof(unsignedlong)*8; char*p_hex=newchar[sizeof(unsignedlong)*8/4+3]; p_hex[0]='0'; p_hex[1]='x'; p_hex[bit_num/4+2]='\0'; char*p_tmp=p_hex+2; for(unsignedinti=0;i { p_tmp[i]=data<<(4*i)>>(bit_num-4); if(p_tmp[i]>=0&&p_tmp[i]<=9) p_tmp[i]+='0'; elseif(p_tmp[i]>=10&&p_tmp[i]<=15) p_tmp[i]=p_tmp[i]-10+'A'; } returnp_hex; } 最长不降序子序列 //result存储最长单调递增子序列的长度,minInMax存储长度为i的最长递增子序列中的末尾元素中的最小值 voidlis2(vector { vector inti,low,high,mid; result[0]=1; minInMax[result[0]]=array[0]; for(i=1;i { if(array[i]>minInMax[result[i-1]])//当前元素值大于array[0···i-1]序列中最长递增子序列中的最大值的最小值 { result[i]=result[i-1]+1; minInMax[result[i]]=array[i]; }else { result[i]=result[i-1]; low=0; high=result[i-1]; mid=(low+high)/2; while(low<=high)//由于minInMax是递增的,所以使用二分查找确定array[i]应该放在哪个位置上 { if(array[i]>minInMax[mid]) { low=mid+1; }else{ high=mid-1; } mid=(low+high)/2; } minInMax[low+1]=array[i]; } } } 整数的素数和分解问题 对于一个给定的整数,输出所有这种素数的和分解式,对于同构的分解只输出一次(比如5只有一个分解2+3,而3+2是2+3的同构分解式)。 example: 对于整数8,可以作为如下三种分解: (1)8=2+2+2+2 (2)8=2+3+3 (3)8=3+5 思路: f(N,array)=f(N-array[i],array),保存结果,array是保存里面元素值,即所有素数,如果素数只能唯一使用一次,那么就建立对应的一个bool数组即可,每使用一次就标记为true,然后递归函数之后需要重新置为false,对于本题不需要如此,但是需要将保存结果的数组除去当前尝试的素数。 代码不难写出: /* *Copyright(c)2011alexingcool.AllRightsReserved. */ vector vector voidoutputResult(intN,vector { if(N<0) return; if(N==0){ copy(result.begin(),result.end(),ostream_iterator cout< return; } for(inti=0;i //为提高效率,可以在此做个判定条件,尽快返回 if(N-prime[i]<0) break; result
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 笔记 IT 面试