力扣题目采用「核心代码」模式,要求用户实现 代码模版 中给出的函数或方法,而无需编写完整的程序。解题所需的大部份头文件、命名空间、包等都已经在运行环境中预先导入,用户无需自行导入,但需要注意潜在的名称冲突问题。
在这种模式下,您可以更专注于核心逻辑的编写,且更类似于实际的项目开发,可以理解为自己正在开发系统中的一个组件,将会被系统中的其它部分调用。由于您编写的是一个「组件」而非完整的系统,入口函数如 main
也与解题无关。
与很多用户所习惯的「标准输入输出」不同,「核心代码」模式的输入通过 函数传参 获取,通过 函数返回值 输出。代码中通过 printf
、cout
等标准输出函数打印的内容将会在「测试结果」中显示在「标准输出」中,与题目要求的输出无关,一般可以打印运行中的值用以调试程序。同样的,您 无法 使用 scanf
、cin
等标准输入函数来获取输入,因为输入是通过函数传参传入的。
注意,由于您编写的方法会被系统中其它组件调用,对系统的其它部分而言,您编写的方法被抽象为一个“黑盒”,对其传入指定的值,就会输出符合预期的值,而其内部的实现并不重要。因此修改代码模版中给出的方法签名(方法名、参数类型和返回类型)会导致类型、方法名不匹配的错误。如果不慎修改,可以使用「还原到默认的代码模版」功能进行重置。
示例
以力扣第一题 两数之和 为例。假如使用 C++
语言,力扣会在「代码编辑器」中提供代码模版,如下:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { } };
根据题目信息,读入的是一个整数数组 nums
和一个整数目标值 target
,可以看到它们都在方法的参数中被传入。您需要实现 Solution::twoSum
方法,使其能够根据传入的 nums
和 target
参数返回题目要求的整数数组。以下是该题的完整样例代码:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { // 代码模版给出的函数签名,修改会导致错误 auto len = nums.size(); // 参数已包含测试用例的输入值 map<int, int> mp; // 相关头文件已预先包含 vector<int> ans{}; // 相关命名空间已预先包含 for (int i = 0; i < len; i++) { if (mp.count(target - nums[i])) { if (i == mp[target - nums[i]]) continue; ans.push_back(i); ans.push_back(mp[target - nums[i]]); } mp[nums[i]] = i; } return ans; // 返回整数数组作为题目的输出 } };
如需在本地环境中进行调试,您可以将题目的代码复制到本地,并补全其它运行所需的导入、命名空间、入口函数等。另外,建议养成初始化变量的习惯,全局变量、类内静态变量等在多个测试用例执行时可能会保存上一个测试用例执行后的值导致后续测试用例出错。