当前位置: 首页 > 面试经验 >

oppo笔试(C++)

优质
小牛编辑
163浏览
2023-03-28

oppo笔试(C++)

  1. 第一题
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#
 类似资料: