力扣刷题题解注意(7

力扣128最长连续序列

由于题目在哈希分类,所以向哈希方向思考。还有一点是题目中提到“时间复杂度O(n)”,其实如果没有这个条件直接可能会朝着数组处理方向,先排序(积累这种思考方式),去重,累积连续最长……,很麻烦。所以直接向哈希思考,但是如果使用数组来处理,题目中说明了num[i]的数量级达到了9次幂,所以数组长度显然不够。这种情况下我们就要向着底层O(logn),自动去重,自动排序的set方向思考。

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        set<int> s;
        int len=nums.size();
        vector<int>result;//存放找到的结果
        if(len==0)
        return 0;
        for(int i=0;i<len;++i)
            s.insert(nums[i]);
        set<int>::iterator iter=s.begin();
        int temp=*iter;//存放第一个元素的值
        iter++;
        int sum=1;//最长连续序列
        bool flag=false;
        while(iter!=s.end())
        {
            if((*iter-temp)!=1)
            {
                result.push_back(sum);//存放一次连续序列长度
                sum=1;
            }
            else
                sum++;//连续序列加一
            temp=*iter;//指向下一个位置
            iter++;
        }
        result.push_back(sum);//把最后一次连续的存入 
        int len2=result.size();
        int mmax=1;
        for(int i=0;i<len2;++i)
            mmax=max(result[i],mmax);
        return mmax;
    }
};

1.思路不难,但是想要一次通过很困难,其实是使用双指针,对于每一个元素,左指针temp变量如果比右指针iter指针小1,那么那么可以自动计算sum增加。如果不连续,那么重新sum=1,开始累积连续。

2.并不是nums只有一个连续序列,所以我使用vector最终选择一个最大的连续序列。

3.必须在遍历之后存入最后一次的sum,因为遍历如果最后到end(),是没有机会存放最后一次的连续序列的。

4.虽然题目很简单,但是不要浪费太多时间,最初就把可能的情况思考周全,以免后续反复修改。也要刻意积累常见的提高代码健壮性的思考方式。

力扣49字母异位次词分组

首先看到这道题目的时候被中等题目吓到,没有向着set,map方向思考。开始使用vector和二维vector手撕,代码不断调试不断修改大约50行,持续了1h。最终看到题解仅仅几行,暴露了对于map的不熟悉,其实在调试的过程中就可以看得到对于很多映射比较很乱,但是没有向 map思考,但是这道题的大前提思路还是排序。

vector<vector<string>> groupAnagrams(vector<string>& strs) {
    unordered_map<string,vector<string>> media;//1.
    for(string str:strs)//2.
    {
        string key=str;
        sort(key.begin(),key.end());//3.
        media[key].push_back(str);//4.
    }
    vector<vector<string>>ans;
    for(auto it=media.begin();it!=media.end();++it)//5.
    {
        ans.push_back(it->second);//6.
    }
    return ans;
}

1.注意对于map的定义方式<,>分别放置键和值,类型自己考虑

2. 对于vector的遍历方式,刻意直接类似于py,for(type element:elements)

3.对于字符串也可以使用sort(string.begin(),string.end())进行排序

4.对于map直接赋值给对应的键的操作要仔细体会,这个是关键操作,如果不使用map那么需要大段代码实现。

5.熟悉对于unordered_map的遍历过程

6.对于键是:it->first,对于值是it->second

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值