Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155856
  • 博文数量: 129
  • 博客积分: 125
  • 博客等级: 入伍新兵
  • 技术积分: 670
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-17 16:37
文章分类

全部博文(129)

文章存档

2013年(12)

2012年(117)

我的朋友

分类: IT职场

2012-07-20 15:14:45

原文地址:http://blog.sina.com.cn/s/blog_4cd4942f0100c67l.html

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.

Ros:
1, 确实可以有两种方法

#define SWAP(x,y) x+=y; y=x-y; x=x-y

#define SWAP(x,y) x^=y; y^=x; x^=y

第一中较通用,同类型都可以。第二种,以为采用位操作符,而float, double型的位操作是不能通过编译器的。但我始终觉得,不管是用什么数据类型,在内存中最终是二进制,这样第二种中逻辑上应该是能行的通的,只是不能通过编译。

2,
int do_dup(int a[], int N){
char *p_count,i;
p_count = (*char)malloc(N);//时间复杂度是o(N)但占用的空间多了点
for(i=0;i<N;i++){
    *(p_count+a[i])++;
    if(*(p_count+a[i]) == 2){
    return a[i];
    }
}

free(p_count);
}

当然,有人用hash表做的,可惜我没hash过。不过思路也没什么差异

3,Key: 2的n次幂在二进制上有共性,都是只有一个bit为1,其余全为0;
  (x&(x-1))?0:1 //1 for true, 0 for false

4,转换,其实就是每位都与1做异或的结果

unsigned int intvert(unsigned int x,int p,int n){

return x^=(((1<

}


一直没用过hash表,不过时常听说,好像数据库的基本结构都是这个东西,要想转到Storage,得花点时间弄明白。
阅读(874) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~