京东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;
} 
