30,417
社区成员




LeetCode官网:https://leetcode-cn.com/
LeetCode账号分为国内账号和美国账号,注册哪个看你自己的决定了~
我们前往题库页面,选择一道题进入,这里选择第26题:
[26. 删除有序数组中的重复项]https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
进入之后,页面的左侧是题目的描述:
右侧是提交代码的地方:
LeetCode中并不是让我们写主函数,而是给了我们一个名为Solution的类的框架,LeetCode在那边会引入我们写的这个类,然后调用名称确定的函数(题目给出的函数名、传参类型和顺序不能改哦,传参名可以改),然后根据输出判断我们代码写的对不对。因此在LeetCode是不写主函数的,其它刷题平台的话也是要根据它们各自的规则去做。
代码中可以定义其它类、其它函数,这些都是作为你的代码的辅助而存在的。代码中用到的一些自己写的函数也要跟着提交上去。LeetCode那边只会调用Solution
类中指定的函数。
函数的传参就是测试用例的数据
例如[1. 两数之和]中,第一个示例如下:
而给出的代码框架如下:
则代表函数传参的第一项nums
即为一个存放着2,7,11,15的数组,而target
则是整型9。
当你认为自己写的差不多了之后,在右侧页面的下方点击“执行代码”,LeetCode就会用该题的默认测试用例来测试你的代码。
如果有编译、ub等错误就会提示:
如果成功运行了,LeetCode不会主动提示你是否出错,一般需要自己去看:
不过LeetCode网页版在图的右侧有提供“差别”选项,打开能方便查看自己代码的输出和标准答案的区别:
请尽量地多写一点不同的测试用例来测试你的代码,以下题为例:删除数组内所有重复项,每个元素只留一个
[26. 删除有序数组中的重复项]https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
你至少需要用这些测试案例来确认你的代码是否正确:
[1,1,2]
[0,0,1,1,1,2,2,3,3,4]
上述两例是题目描述中给出的例子:
[]
[1]
[1,1]
[1,1,1]
[1,2]
[1,2,3,4]
...
在右下角的这个地方可以书写自己的测试用例:
点击“执行代码”按钮之后便可以查看结果:
要注意的是:写出来的测试用例一定要符合题目的提示:
在上题中,如果我们写了一个不是按非递减排列
的测试用例,则LeetCode会提示你“数组应按非递减排列”:
例如上题中,你可以:
[]
来测试自己的算法能不能兼顾空数组的情况。当你发现已有的代码结构不能、或不容易对空数组进行改进,那你可以在函数的开头对数组长度进行判断,如果为0就直接return或者怎么怎么样。(注意题目要求中写明了数组长度>=0,如果题目写明了数组长度不会到0,则不需要考虑空数组的情况)[1,1]
来测试自己的代码能不能删除重复项,只留下一个。结果应为[1]
。[1,1,1,1]
来测试自己的代码能不能将所有的重复项删除。结果应为[1]
。但是写了[1,1,1,1]
,再写个[1,1,1,1,1]
就没有意义了。既然你的代码能删除3个1,那它就能删除4个1。
所以说,我们写的测试用例要兼顾各种状况,尽量不要做重复的测试。
关于在LeetCode中进行标准输出可查看:
https://support.leetcode-cn.com/hc/kb/article/1194352/
LeetCode中有着进度的概念,每个进度都是独立的,各自记录着不同的刷题记录和提交记录。进度会记录使用该进度时的题目通过总数、题目提交总数、通过的提交数和总提交数:
创建并切换到新进度时,在该进度中所有的题目都是未提交状态。[原进度的刷题记录不会改变]
这个功能方便大家对于自己的刷题进行合理的计划,也方便大家对题目进行复习。
当你认为自己的代码写的差不多了,且通过了自己能想出来的所有测试用例,再去尝试提交代码。因为提交记录会存到进度中,要想删除就只能整个删除进度,不能对提交记录进行删除(我当初就被坑了,而且默认进度还不能删)。所以你如果担心自己的进度里有很多失败的提交记录很不好看,那么就请你多写、尽量写测试。
有的时候,你的代码会在某个犄角旮旯的,很“偏”的那种地方出现问题:自己的代码能通过大部分的测试,但提交代码后偏偏在某个测试上出现了错误,而这个测试还就是那种很合理但我们偏偏没有想到的例子。在之后的刷题过程中大家可能慢慢就会遇到了,大家在写测试用例的时候一定要尽量。