【leetcode刷题之旅——C++】简单篇

今天准备开启letcode刷题之旅的篇章,由于我的算法基础比较差,所以准备从简单的题开始刷着,慢慢提升难度,然后每天记录一下当天的收获,接下来就是随笔性记录

旧东西

  1. 通过循环遍历每一个元素能够解决很多问题,虽然不会是最优解,但是会为解题提供一个思路
    for(int i = 0; i < s.size; ++i)
    {
        s.at(i)...
    }

    类似这种暴力方式

  2. 总想用最直接的想法去完成一个问题,导致冗余代码大量增多
  3. 想利用辅助数组对一些问题进行解析,但是今天遇到的问题如果用辅助数组反而会增加空间复杂度,但是还是应该实现吧

新东西

  1. 学会了到了应该怎么样去判断是否超出整形数的范围。
    力扣题库的第7题
    int rev = 0;
    while (x != 0) {
        int pop = x % 10;
        x /= 10;
        if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;//判断是否超过整形的上限
        if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;//判断是否超过整形的下限
        rev = rev * 10 + pop;
    }
     return rev;
    如上,是官方的解答
  2. 学会了双指针(索引)判重的做法
    力扣题库的第26题
    if(nums.empty())  return 0;
        int i = 0;
        for(int j = 1; j < nums.size(); ++ j){
            if(nums[i] != nums[j]){
                nums[++i] = nums[j];
            }
        }
    return i + 1;

    如上,通过两个索引来对数组中的值进行比较,最终去除掉有序数组中的相同元素

  3. 学会了利用哈希表找到目标值的思想
    力扣题库的第1题
    map<int,int> a;//建立hash表存放数组元素
    vector<int> b(2,-1);//存放结果
    for(int i=0;i<nums.size();i++)
    a.insert(map<int,int>::value_type(nums[i],i));
    for(int i=0;i<nums.size();i++)
    {
        if(a.count(target-nums[i])>0&&(a[target-nums[i]]!=i))
        //判断是否找到目标元素且目标元素不能是本身
        {
            b[0]=i;
            b[1]=a[target-nums[i]];
            break;
        }
    }
    return b;

    如上,作者:gpe3DBjDS1 链接:https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-by-gpe3dbjds1/
    非常感谢他(她)的代码

总结

  1. 需要学习的东西还相当多,需要实践的东西也挺多的
  2. 总想用最直接的方法去解决问题,不愿意思考更多的解决方式,在到别人的解答之后越发感觉自己真的还有很多能够学习的地方
  3. 总想去解答新问题,对之前的问题总结以及应用总是比较差
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值