京东4/2测开笔试题 求解答
4/2京东笔试算法题
1.将n个数据分成2组(基础组和进阶组)使得前者的最大值和后者的最小值的差值最小,第一行正整数T 表示数据组数 对于每一组数据,第一行一个正整数n,第二行n个正整数,对于每一组数据,输出一行一个整数,表示最小的差值
输入:
2
6
3 1 4 2 2 3
5
3 1 2 6 4
输出:
0
1
ac55%
#include<iostream> using namespace std; #include<vector> #include<algorithm> int main() { int T; cin >> T; vector<vector<int>>v; for (int i = 0; i < T; i++) { int n; cin >> n; vector<int>v0(n,0); for (int j = 0; j < n; j++) { cin >> v0[j]; } v.push_back(v0); } for (int i = 0; i < T; i++) { int m = v[T].size(); sort(v[T].begin(), v[T].end()); if (m == 2) { cout << v[T][1] - v[T][0] << endl; } else if(m>2) { int d = 10000000000; for (int j = 1; j < m ; j++) { if (v[T][j] == v[T][j-1]) { return 0; } d = min(d, v[T][j ] - v[T][j-1]); } cout<<d<<endl; } } return 0; }2.一颗满二叉树 U:向上走,L:向左子树走,R:像右子树走 n代表走了几步 x代表当前节点 输入 n x 输出最后节点
输入
3 2
URL
输出
6
ac 36%
#include<iostream> using namespace std; #include<vector> #include<algorithm> int main() { int n,x; cin>>n>>x; string s; for(int i=0;i<n;i++) { cin>>s[i]; } for(int i=0;i<n;i++) { if(s[i]=='U'&&s[i]!=1) { x=x/2; } else if(s[i]=='L') { x=2*x; } else { x=2*x+1; } } cout<<x<<endl; return 0; }