记录一下简单题中的经验以及错误,防止以后再犯(因为能力原因,目前只限于通过,至于算法的优化,等到中等/难题再考虑)
目录
1. 关于Leetcode中运行提示 control reaches end of non-void function 的 error:
用C++写的,出现这种提示可能并不是程序逻辑有误(我觉得是因为 Leetcode 的程序测试用的是白盒测试,所以每一个逻辑都要走一遍,如果它检测到某个逻辑不能返回值,那么可能就会报错),只需要在public函数末尾return一个值就可以了,这个值可以任意,亲测有效,执行和提交都可以成功通过
以下是Leetcode中第83题(简单题)没有在最后return一个值所以报错
solution.cpp: In member function deleteDuplicates
Line 42: Char 5: error: control reaches end of non-void function [-Werror=return-type]
}
^
cc1plus: some warnings being treated as errors
2. 有时候刷题不需要考虑那么多因素,比如88题,题目中只说是有序数组,当时我想考虑升序和降序2种情况,但是考虑到之前写的题总是考虑太多最后定位错误需要好久所以这次我试着不关注数组内部的情况,思路是将nums2的元素直接覆盖nums1中从0开始的元素,然后弹出nums2中为0的数,最后用sort排序。通过这题又复习了一遍vector中常用的3种函数:
- nums.pop_back(); //弹出末尾元素(直接写pop没有用,因为pop()是栈中才能使用的东西)
- nums.push_back(a); //类似压栈(同理不能缺写back)
- sort(nums.begin(),nums.end()); //对vector中的所有元素进行排序,如果要修改默认排序的方法,就要加上第三个参数(函数需要自己写)
3. 构造平衡二叉树时,求中点不要用int mid=(l+r)/2,因为有溢出风险,比较稳妥的做法是int mid=l+(r-l)/2
4. 对有序链表查找中位数可以用快慢指针法,快指针向前移动速度是慢指针向前移动速度的2倍
5. C++中的map函数,就是key和value的映射;169题求众数中,可以用map记录每个值出现的次数,最后用迭代器访问map查找出现次数多于n/2的值并返回;m.count(x):查找m中是否有x,如果有,则返回1,否则返回0,x在m中只可能出现1次,因为key是关键值,不允许多次出现;遍历map的迭代器可以这样定义:
map<int,int>::iterator it;
for(it=m.begin();it!=m.end();it++){
if(it->second >nums.size()/2){
return it->first;
}
}