用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
wheatlee的公告
文章分类
    存档

    原创  微软面试题之一 收藏

    请把一个整形数组中重复的数字去掉。例如:
    1, 2, 0, 2, -1, 999, 3, 999, 88
    答案应该是:
    1, 2, 0, -1, 999, 3, 88
     
    一个不需要哈希的算法,算法的复杂度应该是O(n^2)

    int xiaoyuan_sort(int R[], int n)     //消元函数定义

    {

    int i, j, k;

    for (i = 0; i < n; i++)      //循环整个数组

    for (j = i + 1; j < n; j++)  //滞后一个元素开始循环

    if (R[j] == R[i])      //如果有重复元素

    {

    n--;               //数组大小减1

    for (k = j; k < n; k++)

    R[k] = R[k + 1];  //从重复元素开始,元素依次向前移动一个位置

    j--;

    }

    return n;

    }

     

    另一个用分段哈希

    #include <iostream>

    using    namespace std;

    const    int  v2=11;
    const    int  v1=10;

    bool     Index[v2][v1][v1];

    void     Unique( int *list, int len ){ //¶ÔÕûÐÍÊý×éÊÊÓÃ
    int  i, j, col, line, temp;
    bool exsit;

    for( i=0; i<len; ++i ){
    j=0;
    exsit=true;
    temp=list[i];

    col=temp>0;
    line=temp%v1;

    while( j<v2 ){
    if( Index[j][col][line]==false ){
    exsit=false;
    Index[j][col][line]=true;
    }
    temp/=v1;
    col=line;
    line=temp%v1;
    ++j;
    }
    if( exsit==false )
    cout<<list[i]<<" ";
    }
    }

    int      main( ){
    int  list[]={1, 2, 0, 2, -1, 999, 3, 999, 88};
    int  len=sizeof(list)/sizeof(list[0]);

    Unique( list, len );
    cout<<endl;

    return 0;
    }

    #include <iostream>

    using    namespace std;

    const    int  v2=11;
    const    int  v1=10;

    bool     Index[v2][v1][v1];

    void     Unique( int *list, int len ){ //¶ÔÕûÐÍÊý×éÊÊÓÃ
    int  i, j, col, line, temp;
    bool exsit;

    for( i=0; i<len; ++i ){
    j=0;
    exsit=true;
    temp=list[i];

    col=temp>0;
    line=temp%v1;

    while( j<v2 ){
    if( Index[j][col][line]==false ){
    exsit=false;
    Index[j][col][line]=true;
    }
    temp/=v1;
    col=line;
    line=temp%v1;
    ++j;
    }
    if( exsit==false )
    cout<<list[i]<<" ";
    }
    }

    int      main( ){
    int  list[]={1, 2, 0, 2, -1, 999, 3, 999, 88};
    int  len=sizeof(list)/sizeof(list[0]);

    Unique( list, len );
    cout<<endl;

    return 0;
    }

     我也忘记鸟

    发表于 @ 2007年09月26日 19:04:00 | 评论( loading... ) | 编辑| 举报| 收藏

    旧一篇:微软面试之我见(2)---- 中国测试的尴尬 | 新一篇:反复求整数和,直到个位为止

    • 发表评论
    • 评论内容:
    •  
    Copyright © wheatlee
    Powered by CSDN Blog