zoukankan      html  css  js  c++  java
  • 常见面试题学习(3)

    来源于:

    http://blog.csdn.net/lin_bei/article/details/1565575 

    1. 中位数,也是利用2分查找,去掉一半的算法,只是这个 中位数 。。。。总是求的是最小的那个,而不是平均值。。。

    Gray 码,使用递归分治求GRAY码

    硬币找零问题

    #include <iostream>

    using namespace std;
    int findMedian(int *a,int *b,int n)
    {
    if(n == 1)
    return *a <= *b ? *a: *b;
    int m = (n - 1) >> 1;
    int p = m + 1;

    if(n % 2 != 0)//n 为奇数
    {
    p
    --;
    }
    if(*(a + m) == *(b + m))
    {
    return *(a + m);
    }
    else if(*(a + m) < *(b + m))
    {
    return findMedian(a+p,b,m + 1);
    }
    else
    {
    return findMedian(a,b + p,m +1);
    }

    }
    int main()
    {
    int a[3] = {5,15,18};
    int b[3] = {3,14,21};
    int result = findMedian(a,b,3);
    cout
    << result << endl;

    return 0;
    }

      2. Gray 码,使用递归分治求GRAY码

    http://topic.csdn.net/u/20080331/21/aabec9b7-a617-432a-9ada-a6d0823fd047.html

    #include <iostream>
    #include
    <iterator>
    #include
    <algorithm>

    using namespace std;

    int *Road;

    void R_Gray( int, int );

    void Gray( int n, int level ){
    if( level==0 ){
    copy( Road, Road
    +n, ostream_iterator<int>(cout) ),cout<<endl;
    return;
    }
    Road[n
    -level]=0;
    Gray( n, level
    -1 );
    Road[n
    -level]=1;
    R_Gray( n, level
    -1 );
    }

    void R_Gray( int n, int level ){
    if( level==0 ){
    copy( Road, Road
    +n, ostream_iterator<int>(cout) ),cout<<endl;
    return;
    }
    Road[n
    -level]=1;
    Gray( n, level
    -1 );
    Road[n
    -level]=0;
    R_Gray( n, level
    -1 );
    }

    int main()
    {
    int n;
    cin
    >>n;
    Road
    =new int[n];
    Gray( n, n );
    delete []Road;
    return 0;
    }

      还有非递归的

    #include <iostream>

    using namespace std;

    void print_bit_model( int len, int n ){
    for( int i=len-1; i>=0; --i )
    cout
    <<((n>>i)&1);
    cout
    <<endl;
    }

    int main()
    {
    int n;
    cin
    >>n;
    const int M=1<<n;
    for( int i=0; i<M; ++i )
    print_bit_model( n, i
    ^(i>>1) );
    return 0;
    }

      3. 硬币找零问题

         动态规划

    #include <fstream>
    #include
    <iostream>
    #include
    <algorithm>

    using namespace std;
    #define INT_MAX 999999
    int changeCoins(int *T, int n, int v);

    int main()
    {
    int n;
    int v = 10000;

    cin
    >>n;
    int *T=new int[n];
    for(int i=0;i<n;i++)
    {
    cin
    >>T[i];
    }



    int result=changeCoins(T,n,v);

    cout
    <<result<<endl;


    return 0;
    }


    int changeCoins(int *T, int n, int v)
    {
    //先对3个硬币按面值进行排序
    sort(T,T+n);
    int **c=new int*[n];
    for(int m=0;m<n;m++){
    c[m]
    =new int[v+1];
    }
    //初始化第一行,只有一个硬币时的情况
    for(int i=0;i<=v;i++)
    if(i%T[0]==0)
    c[
    0][i]=i/T[0];
    else
    c[
    0][i]=INT_MAX;
    //从第二行开始
    for(int j=1;j<n;j++)
    for(int k=0;k<=v;k++)
    //新加进来的硬币大于要找的钱,用不到这个硬币,所以还是跟上一行的一样
    if(k<T[j])
    c[j][k]
    =c[j-1][k];
    else
    c[j][k]
    =c[j-1][k]<c[j][k-T[j]]+1?c[j-1][k]:c[j][k-T[j]]+1;
    return c[n-1][v];


    delete[] c;
    }

      

  • 相关阅读:
    模拟扑克的洗发牌
    结构体 枚举类型
    return、break和continue
    clipboard.js操作剪贴版——一些移动端交互和兼容经验
    国外主机如何ICP备案
    js文件操作之——导出Excel (js-xlsx)
    深入浅出写一个多级异步回调从基础到Promise实现的Demo
    一个考察闭包的最基础的面试题
    shell常用命令及正则辅助日志分析统计
    node-webkit笔记
  • 原文地址:https://www.cnblogs.com/hitwtx/p/2152867.html
Copyright © 2011-2022 走看看