顺丰机器学习岗笔试题笔记

不能截屏和拍照,凭记忆会议一下,做个记录,当做笔记了

1、下列赋值语句正确的是

A、a,b,c = 1,2,"john"

B、[a,b] = ['1','2']

C、a = ['abc',4,'python']

D、a = b = c = 1

解析: ABCD都对

 

2、以下程序的输出是?

class Dog:
    role = 'Dog'
    def __init__(self,name):
        self.name = name
    def run(self):
        print("Dog is running...")

print(Dog.role)
print(Dog.run)

答案:

解析:函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量. 当打印函数名的时候会发现出现的是一个内存地址.  函数名可以赋值给变量

3、已知概率密度函数和样本值,求参数θ

4、下面程序的输出是?

#include<iostream>
using namespace std;
int main() {
	int n = 10;
	int ans = 0;
	int cur, x;
	for (int s = 0; s < 1024; ++s) {
		cur = 0;
		for (int j = 0; j < 10; ++j) {
			x = (1 << j)&s; 
			if (x != 0) {
				cur++;
			}
		}
		if (cur == 3) {
			ans++;
			cout << "ans= " << ans << endl;
		}
	}
	cout << ans << endl;
	return 0;
}

答案:0000000000   中选3个置为 1 ,答案为C10 3, 结果为120.

5、以下程序输出为?


#include<iostream>
using namespace std;
int fun(int a, int b) {
	return b == 0 ? a : fun(b, a%b);
}
int main() {
	int a = 636, b = 9;
	cout << a*b / fun(a, b) << endl;
	return 0;
}

答案:fun()的作用很明显是辗转相除法(又叫欧几里得算法)求最大公约数,所以结果为  636*9/3  = 1908

6、霍夫曼树又叫最优二叉树

7、LDA和PCA下列区别正确的是?

A、LDA与PCA都是常用的降维技术。PCA主要是从特征的协方差角度,去找到比较好的投影方式。

B、LDA更多的是考虑了标注,即希望投影后不同类别之间数据点的距离更大,同一类别的数据点更紧凑。

7、单例模式中,单例类构造函数的可见性为()

A、public

B、private

C、protected

D、都不对

答案:B

8、相关系数和协方差的关系

编程: 行增,列增的二维数组里面找目标值,复杂度为N方和N+M的都写一下

#include<iostream>
#include<vector>
using namespace std;
//bool findTargetNum(vector<vector<int>>& vec, int target) {
//	int rows = vec.size();
//	int cols = vec[0].size();
//	for(int i = 0; i < rows; i++)
//		for (int j = 0; j < cols; j++) {
//			if (vec[i][j] == target)
//			return true;
//			else return false;
//		}
//
//}
bool findTargetNum(vector<vector<int>> &vec, int target) {  
	int rows = vec.size();
	int cols = vec[0].size();
	int start_row = 0;
	int start_col = cols - 1;
	while (start_col >= 0 && start_row < rows)  //时间复杂度为m+n,注意这个地方是小于号,没有等于,边界条件一定要清楚
	{
		if (vec[start_row][start_col] == target) return true;
		else if (vec[start_row][start_col] > target )
			start_col--;
		else  if (vec[start_row][start_col] < target)
			start_row++;
	}
	return false;
	
}
int main() {
	int m, n;
	cin >> m >> n;
	vector<vector<int>> input(m,vector<int>());
	for (int i = 0; i < m; i++) {
		while(1){
			int temp;
			cin >> temp;
			input[i].push_back(temp);
			if (cin.get() == '\n') break;
		}
	}
	bool result = findTargetNum(input,10);
	cout << result;
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章