车来了——面经

1.项目。从具体算法基本思路(最优路径)到底层实现,从算法逻辑(推荐算法应该考虑用户不点击的情况)到用户数量级(大数据至少为PB级、TB级的数据量)。

2.从一亿个数里面找前1000大的数据。

基本思路:堆排序;

算法逻辑:①首先将输入数据(一维数组)逐步调整为大根堆,此过程为堆排序,时间复杂度为n*log2(n);

                ②然后逐个删除堆顶,将删除的每个堆顶按顺序存储为一维数组,当数组大小为1000时,即找到了前1000大数据,时间复杂度为1000*log2(n);

                ③总的时间复杂度为:O(n*log2(n))

3.四层有向图,找通往底层的最大路径

输入格式:数组

程序代码:

// Max_Path.cpp -- the oriented graph's max path
#include <iostream>
#define floor 4
using namespace std;
int(*Path(int G[floor][floor]))[floor];
int main()
{
int G[floor][floor];
for (int i = 0; i < floor; i++)
{
cout << "Input the No." << i + 1 << " line's data: " << endl;
for (int j = 0; j < floor; j++)
{
cout << "Input the No." << j + 1 << " element: ";
cin >> G[i][j];
cout << endl;
}
cout << endl;
}
cout << "The two dimensional arrays is:" << endl;
for (int k = 0; k < floor; k++)
{
for (int l = 0; l < floor; l++)
{
cout << G[k][l] << " ";
}
cout << endl;
}


int (*p)[floor];
p = Path(G);
cout << "The max path is:" << endl;
for (int m = 0; m < floor; m++)
{
for (int n = 0; n < floor; n++)
{
cout << p[m][n] << " ";
}
cout << endl;
}


int max = 0;
for (int k = 0; k < floor; k++)
{
if (p[floor - 1][k] > max)
{
max = p[floor - 1][k];
}
}
cout << "The max value is: " << max ;


cin.get();
cin.get();
return 0;
}




int(*Path(int G[floor][floor]))[floor]
{
int(*p)[floor] = new int[floor][floor];
for (int k = 0; k < floor; k++)
{
for (int l = 0; l < floor; l++)
{
p[k][l] = 0;
}
}
p[0][0] = G[0][0];
for (int i = 1; i < floor; i++)
{
p[i][0] = G[i][0] + p[i - 1][0];
}
for (int i = 1; i < floor; i++)
{
for (int j = 1; j <= i; j++)
{
p[i][j] = p[i - 1][j - 1] > p[i - 1][j] ? (p[i - 1][j - 1] + G[i][j]) : (p[i - 1][j] + G[i][j]);
}
}
return p;
}





猜你喜欢

转载自blog.csdn.net/ying6102/article/details/79940398
今日推荐