中兴笔试,为啥测试用例好多不通过
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]; }....突然发现好像是因为返回值应该返回最优解的,动态规划还是不是熟悉。。。
凉了呀
#中兴##笔试题目#