创新工场2014笔试算法题汇总

来源:互联网 发布:双11淘宝电脑打折么 编辑:程序博客网 时间:2024/06/05 07:04


1. 堆排序

#include<iostream>   usingnamespace std;     void SwapValue(int &m, int &n)  {      int temp = m;      m = n;      n = temp;  }  void max_heap(vector<int> &vec, int i, int heap_size)  {      int l = 2*i;      int r = 2*i+1;      int largest = i;            if(l<=heap_size && vec[l-1]>vec[largest-1])          largest = l;      if(r<=heap_size && vec[r-1]>vec[largest-1])          largest = r;        if(largest!=i)      {          SwapValue(vec[largest-1],vec[i-1]);          max_heap(vec, largest, heap_size);      }  }  void heapSort(vector<int> &vec)  {      int heap_size = vec.size();      for(int i=heap_size/2; i>=1; i--)          max_heap(vec, i, heap_size);      for(int i=heap_size; i>=1; i--)      {          SwapValue(vec[0],vec[i-1]);          max_heap(vec, 1, i);      }  }  void print(vector<int> vec)  {      for(int i=0; i<vec.size(); i++)          cout<<vec[i]<<" ";      cout<<endl;  }    int main()  {      vector<int> vec;      vec.push_back(23);      vec.push_back(5);      vec.push_back(1);      vec.push_back(10);      vec.push_back(13);      vec.push_back(32);      vec.push_back(21);      vec.push_back(14);      vec.push_back(19);      vec.push_back(20);            cout<<"排序前: "<<endl;      print(vec);            heapSort(vec);            cout<<"排序后: "<<endl;      print(vec);      return 0;  }   


2.求一个正整数N的开方,要求不能用库函数sqrt(),结果的精度在0.001
解析:牛顿迭代

#include<iostream>  using namespace std;  int main()  {      int N;      cout<<"输入N的值:";      cin>>N        double x1 = 1;//初值      double x2 = x1/2.0+N/2.0/x1;      while( fabs(x2-x1)>0.001)      {          x1 = x2;          x2 = x1/2.0+N/2.0/x1;      }      cout<<x1<<endl;        return 0;  }  


3.给定一个矩阵intmaxtrixA[m][n],每行和每列都是增序的,实现一个算法去找矩阵中的某个元素element.

解法一:

#include<iostream>  using namespace std;    const int M = 4;  const int N = 4;  int main  {      int matrix[M][N] = {};      double element;            int flag = 1;      for(int j=0; j<N; j++)      {          if(matrix[i][j] == element)              cout<<"位置"<<endl;          while( flag<M && matrix[i][j]<element )              --flag;          while( flag<M && matrix[i][j]>element )              ++flag;      }   }  

解法二:

bool Find(int *matrixA, int m, int n, int element)  {      bool found = false;      if(matrixA != NULL & m & n)      {          int i,j;          i=0;j=n-1;          while(i<m;j>=0)          {              if(maxtrixA[i*n+j] == element)              {                  found = true;                  break;              }              else if(matrix[i*n+j]>element                  --j;              else                  ++i          }      }  } 

转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12233289