oppo笔试(C++)
- 第一题
class Solution {
public:/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 输入参数是每个应用持有WakeLock的起始时间及结束时间,函数返回值是每个应用对总WakeLock时长的贡献值,返回值vector里面的每个元素的数值累加即为手机总的持有WakeLock的时长。
* @param wakeLock int整型vector<vector<>> vector<vector<int>>的每个元素代表某个应用的持有WakeLock的信息,内部的vector<int>,元素按照奇偶排列,偶数元素代表拿WakeLock的起始时间点,奇数代表释放WakeLock的时间点
* @return int整型vector
*/
vector<int> getWakeLockContrib(vector<vector<int> >& wakeLock) {
unordered_map<int, vector<int> > map;
for (int i = 0; i < wakeLock.size(); i++) {
for (int j = 0; j < wakeLock[i].size(); j += 2) {
for (int start = wakeLock[i][j]; start < wakeLock[i][j + 1]; start++) {
map[start].push_back(i);
}
}
}
vector<double> res(wakeLock.size());
for (int i = 0; i < wakeLock.size(); i++) {
for (int j = 0; j < wakeLock[i].size(); j += 2) {
for (int start = wakeLock[i][j]; start < wakeLock[i][j + 1]; start++) {
res[i] += 1.0 / map[start].size();
}
}
}
vector<int> ress(wakeLock.size());
for (int i = 0; i < res.size(); i++) {
ress[i] = res[i];
}
return ress;
}
};
2. 第二题
class Solution {public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* findStr从反方向查找子串,返回最后一次匹配成功时,子串的偏移位置,如果没有匹配成功返回-1
* @param str string字符串 待匹配的字符串
* @param mod string字符串 匹配模式字符串
* @return int整型
*/
int findStr(string str, string mod) {
if (str.size() < mod.size()) return -1;
bool ok = false;
for (int i = mod.size() - 1; i < str.size(); i++) {
int j = 0;
while (j < mod.size() && (mod[j] == str[i - j] || mod[j] == '*')) j++;
if (j == mod.size()) return i;
}
return -1;
}
};
3.反转链表
#OPPO#