中兴笔试,为啥测试用例好多不通过
1.工资排序问题,按频率排,考试代码没复制,重写了下,大致思路是这样。
#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_map>
using namespace std;
int main()
{
int s[12]={1,2,1,2,3,3,1,6,5,4,4,4};//测试用的数组
unordered_map<int, int> hash;
for (int i = 0; i < 12; i++)
{
if (hash.count(s[i]) == 0)
hash[s[i]] = 1;
else
hash[s[i]]++;
}
vector<pair<int, int>> count;
for (auto it = hash.begin(); it != hash.end(); it++)
count.push_back(pair<int, int>((*it).first, (*it).second));
sort( count.begin(), count.end(), []( pair<int, int> &a, pair<int, int> &b ) {return a.second > b.second; } );
for (int i = 0; i < (int)count.size(); i++)
{
for (int j = 0; j < count[i].second; j++)
cout<<count[i].first;
}
return 1;
} 2.放射物的质量,和能量问题,动态规划,用了三层,时间来不及,过了几个用例吧,应该是边界没弄对
int maxEnergyGenerate(int reactorCap, int numberOfRadLiquid, int criticalMass, int *volumes, int *messes, int *energies)
{
int maxValue[numberOfRadLiquid + 1][reactorCap + 1][criticalMass + 1];
for (int i = 1; i <= numberOfRadLiquid; i++)
{
for (int j = 1; j <= reactorCap; j++)
{
for (int k = 1; k <= criticalMass; k++)
{
if (i == 1)
{
if ((volumes[i - 1] <= j) && (messes[i - 1] <= k))
{
maxValue[i][j][k] = energies[i - 1];
}
else
{
maxValue[i][j][k] = 0;
}
}
else
{
if ((volumes[i - 1] > j ) || (messes[i - 1] > k))
maxValue[i][j][k] = maxValue[i - 1][j][k];
else
{
maxValue[i][j][k] = max( maxValue[i - 1][j][k], energies[i - 1]+
maxValue[i - 1][j - volumes[i - 1]][k - messes[i - 1]] );
}
}
}
}
}
return maxValue[numberOfRadLiquid][reactorCap][criticalMass];
} ....突然发现好像是因为返回值应该返回最优解的,动态规划还是不是熟悉。。。 凉了呀
#中兴##笔试题目#
深信服公司福利 826人发布