每日一题0505

文章介绍了两个C++编程问题的解决方案,一是找到任务时间最长的员工,通过遍历二维数组并比较时间差来确定;二是对字母异位词进行分组,利用排序或预处理方法构建映射关系。文章强调了在C++中优化性能的关键在于减少拷贝,如使用引用和指针,以及std::move来提升效率。
摘要由CSDN通过智能技术生成

2432.完成任务时间最长的员工 easy

题目理解:一个二位的向量表示工号、任务时间起点和终点,从里面找出任务时间最长的员工的工号

思路:类似数组求最大间距的索引,变化:索引值换成了二维数组的首位数,需要做判断取较小

class Solution {
public:
    int hardestWorker(int n, vector<vector<int>>& logs) {
        int hardester = logs[0][0];
        int longestTime = logs[0][1];
        for (int i = 1; i < logs.size(); i++) {
            int tmp = logs[i][1] - logs[i - 1][1];
            if(longestTime < tmp) {
                 longestTime = tmp;
                 hardester = logs[i][0];
            } else if (tmp == longestTime && hardester > logs[i][0]) {
                 hardester = logs[i][0];
            }
        }
        return hardester;
    }
};

语法:根据是否需要索引值来选取相应的循环遍历语法糖,三种:类数组、auto类Java、iterator

49.字母异位词分组 medium

题目理解:把向量里的异位词分组。如:“eat”、“aet”、“tea”

思路1:异位词的本质是多个单词拥有相同种类和数量的字母,那么可以预处理出每个单词的字母种类和个数(利用char的unicode使用char数组),然后按顺序重新拼接每个单词,拼接词作为key构造map,map的value是vector向量。

思路2:直接利用c++容器的排序方法对每个单词排序,同时使用排序后的单词作为key构造map,同样map的value是vector向量。

思路2实现

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        // 两种思路:1.排序 2.预处理再排序
        map<string, vector<string>> tmpMap;
        for (vector<string>::iterator iter = strs.begin(); iter != strs.end(); iter++) {
            string tmpStr = *iter;
            sort(tmpStr.begin(), tmpStr.end());
            tmpMap[tmpStr].emplace_back(*iter);
        }
        vector<vector<string>> result;
        // 遍历tmpMap
        for (auto &it : tmpMap) {
            result.emplace_back(it.second);
        }
        return result;
    }
};

语法:emplace_back和push_back比较,在左值情况下两者都需要拷贝复制,在右值情况下,emplace_back只需要移动拷贝,而push_back需要拷贝赋值+移动赋值,性能较低。

c++优化性能的本质是多用引用和指针,减少拷贝。那么就需要减少右值的拷贝,那么就出现了std::move,将右值变成右值引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值