今天准备开启letcode刷题之旅的篇章,由于我的算法基础比较差,所以准备从简单的题开始刷着,慢慢提升难度,然后每天记录一下当天的收获,接下来就是随笔性记录
旧东西
- 通过循环遍历每一个元素能够解决很多问题,虽然不会是最优解,但是会为解题提供一个思路
for(int i = 0; i < s.size; ++i) { s.at(i)... }
类似这种暴力方式
- 总想用最直接的想法去完成一个问题,导致冗余代码大量增多
- 想利用辅助数组对一些问题进行解析,但是今天遇到的问题如果用辅助数组反而会增加空间复杂度,但是还是应该实现吧
新东西
- 学会了到了应该怎么样去判断是否超出整形数的范围。
力扣题库的第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;
- 学会了双指针(索引)判重的做法
力扣题库的第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;
如上,通过两个索引来对数组中的值进行比较,最终去除掉有序数组中的相同元素
- 学会了利用哈希表找到目标值的思想
力扣题库的第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/
非常感谢他(她)的代码
总结
- 需要学习的东西还相当多,需要实践的东西也挺多的
- 总想用最直接的方法去解决问题,不愿意思考更多的解决方式,在到别人的解答之后越发感觉自己真的还有很多能够学习的地方
- 总想去解答新问题,对之前的问题总结以及应用总是比较差