错题记录

1.数组长度为1的场景未考虑
2.最大和次大值的初始值都赋成了下标为0的值,应该使用下标0 和 1,区分出最大和次大
3.输出结果未做检查,如应该输出值,最后输出了值对应的数组下标
4.漏了分号
5.边界左闭右开
6.未定义和初始化下标i
7.函数名敲错
8.JAVA泛型类型int 和Integer 写错
9.c++ map end()写错
10.java数组初始化用[]初始化大小
11.c++ for循环里不要用 nums.size() - xxx, 单独用一个变量存这个值,然后放到for条件里,否则leetcode里会出现异常情况
比如 nums为空集合时 for循环条件 i < noms.size() - 1 实际上是为true的,变成了一个非常大的数, 这里需要注意下
12.二分查找判断条件写错 应该为mid = left + (right - left) / 2
13.二分查找求上下界需要注意找不到解的情况, 比如求上界,一定要判断left和right是否都小于target,如果都小于,需要返回n
14.java里没有swap 类似c++的,需要自己写
15.java递归深度超出,报错stack overflow
16.java 数组大小length, c++ vector size(), 总是写错。。。
17.二分查找的模版代码中判断条件是l + 1 < r, 千万不能加等号,容易搞出死循环. 当l + 1 == r时,终止循环,在外部判断nums[l] nums[r] 是否和目标值相同
18.二分查找的通用模版里需要判断l和r,所以必须要保证l和r的坐标不能越界
19.注意检查数组越界的问题
20.c++ queue的顶部元素使用front,队列
21.二值状态转移时,忘了重新初始化下一阶段的值,prev next lastPrev lastNext
22.JAVA中注意使用Math. 经常遗忘,也不检查
23.for循环,注意检查++和--,容易写错方向
24.没有检查结果中需要包含空数组
25.java arraylist复制,可以使用初始化时的参数,或者clone方法
26.忘了检查下表的范围,尤其是二分查找的模版代码,最后一定要考虑l和r的边界范围,否则会出现下标的问题
27.c++ 不要在函数里值解使用size()
28.k sum时的初始化条件注意:前k个里取1个时a[i]都为true,注意需要初始化的元素有k*i个,不是i个
29.变量名称拼写错误,却不检查
30.没有查看类型,把char 1和int 1做了比较
31.漏了边界情况,例如初始化,动态规划的初始条件,数组边界的左和右
32.java arraylist大小用size,不要混着用length
33.在递归的终止条件里,使用了判断函数后,要记得return要放在外边,有时忘了把return挪出来,导致递归终止不了,引起其它问题
34.遗漏了边界检查,不光是代码开始需要,代码的中间和结尾部分同样需要注意边界检查
35.java字符串比较时要使用equals,被==坑了一次
36.java集合大小size(),数组是length, 字符串是length() 写错了好几次
37.java集合的构造函数是浅拷贝,这个注意,小心被坑
38.java dfs输出结果时,path要new 一个出来,不然最后都是空的,因为path是对象引用,java里集合的add和c++中vector的push_back
不同,前者是存对象,后者会新建一个实例
39.c++集合交换可以用swap很方便,java是交换引用
40.除法运算一定要记得判断除0,数组下标一定要记得判断越界,尤其是初始状态更应该小心
41.按位与运算的结果是2的次幂,注意不要拿1去判断等于,应该使用不等于0 来判断与出来的结果是否包含1
42.java arraylist获取下标对应的元素, 使用get, 不要和数组[] 混了
43.java map遍历时, Map.Entry<Integer, String> entry : dataMap.entrySet()
44.重新编码后,可以在原先位置,融入更多的信息, 比如原先只能是0和1,通过编码,是否可以构造更大的集合,使得原先同样的空间里,容纳更多的信息
45.数组array可以看作是天然的map或者list,看作map时下标为key,值为value,看作链表时,value为next指针
46.解决问题时,如何利用好关系,如顺序关系,看到有序我们会想到二分查找,有一个很容易忽略的点,是利用出现的先后顺序,比如做two sum时,可以利用先后出现的顺序,解决重复出现的问题.
利用先后顺序是一个很好的解题思路. 通常我们也会习惯把双向问题甚至是多个方向的问题,转换为单一方向,简化问题,方便求解.
47.边界检查必须每次都做. 数组下标是否越界, 输入参数是否合法.
48.遇到乘法时,一定要记住需要检查越界,或者使用long来标记长度, 通常long长度已经足够了
49.c++里注意检查成员变量的类型
50.java里arraylist不能直接用数组的方式访问某个元素
51.翻转64位二进制数时, 考虑下1是有符号还是无符号, 与之后需要判断值为0或1. 而不是直接拿与的结果.
52.检查语法错误时,要注意避免拼写错误
53.检查语法错误时,要注意头文件是否引入
54.检查语法错误时,要注意是否有未定义的变量,是否已定义好变量
55.检查语法错误时,要注意变量的初始值是否设置正确
56.避免直接使用常量, 例如数字1,它默认是有符号的, 应该使用变量对齐封装,因为变量有类型, 可以避免类型转换错误.
57.写代码时,需要确认你写的每一个变量是存在的
58.大数相乘的时候,注意carry的问题, 应该直接把carry加到下一个元素上

转载于:https://www.cnblogs.com/ctrlzhang/p/8486558.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值