思科笔试题1

1. 用宏定义写出swap(x,y)
2.数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
int do_dup(int a[],int N)
3 一语句实现x是否为2的若干次幂的判断
4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001 

参考答案:

1。

#define swap(x, y)/
x = x + y;/
y = x - y;/
x = x - y;

#define swap1(x, y)/
x ^= y;/
y ^= x;/
x ^= y;

对于swap,当输入的数据是不同种类型的话,这个宏的结果是不对的。
对于swap1,只适用于整型数据。

2。

第二题,采用hash表,对访问到的每一个数N,在hash表中记录其值为true,那么当再次访问到时,如果值已经为true,那么表明重复了,这样只要扫描一次,时间复杂度为O(n),而对hash表的访问时间复杂度是O(1)
3。

((i & (i - 1)) ? false : true)

4。

result ^= (  ((1<<n)-1)  <<  p );

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值