【LeetCode攻略】使用LeetCode刷题时你必须注意的几个点

LeetCode刷题攻略

LeetCode中的技巧

  1. 快捷键:调试cmd + ' 提交cmd + Enter
  2. 函数返回vector类型时可以用return {a, b}的形式 (虽缺少可读性,但可简化代码)
  3. C++判断二维矩阵边界的常用写法
    if (!grid.size() || !grid[0].size()) return 0;
    if ((grid.length) == 0 || (grid[0].length) == 0) return 0;
  4. 在class类内定义n和m(非函数体内定义),调用其他函数时也能用n和m,不需要传参数进去了

在这里插入图片描述

如何查看别人提交的代码

点开提交记录,不仅可以看到自己的历史代码,代码时空效率,还能看别人提交的效率很高的带
在这里插入图片描述
点红色柱子就可以看别人的代码了
在这里插入图片描述

LeetCode多组数据的坑点,新手必须要看!!!

最新万能解决方法

  • 全部放public内(包括#define,typedef,const),只需注意const要加static
  • 成员变量或函数间相对顺序任意,都是可以调用的
  • 成员变量会自动初始化为0

在这里插入图片描述
力扣判题机,对每个测试用例都会初始化一次类


技术问题传送门
多组数据有问题,主要是因为力扣判题机对每个测试用例都会初始化一次类,但全局变量,只会初始化第一次,后面需要手动初始化

在这里插入图片描述

vector等容器若不用clear清空,则必须放类内

  • 当vector容器作为全局变量时因为LeetCode要测多组数据,所以必须要用clear清空vector
  • 所以像vector,map这类容器最好定义为类内变量(因为每个测试样例都会初始化一次类),否则你可能在本地测试是通过的,但在提交代码就不会通过,因为它测了多组数据,而vector,map等每次并没有清空

提交次数和用户尝试次数的含义

提交次数是指执行代码的次数,通过次数指执行代码成功的次数
用户尝试次数是指提交解答的次数,用户通过次数是指提交解答Accepted的次数

LeetCode有时没必要用常量N数组

虽然习惯了在全局开一个常量数组,如int q[N];

但因为一开始可能不知道N要开多大,有可能开得太多,导致多一次提交错误
所以其实可以这样做(建议用vector)

在这里插入图片描述

错误提示pointer index

可能是输入的字符串没有加" "

在这里插入图片描述

错误提示AddressSanitizer:DEADLYSIGNAL

内存使用超出范围
在这里插入图片描述

LeetCode只需你写函数,不用写完整的代码

在LeetCode你只需要写函数,头文件一般不用写,后台会帮你添加

完整代码可以在点playground查看
在这里插入图片描述
在这里插入图片描述
代码示例:

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {  
        int n = nums.size();
        int l = 0, r = n - 1;
        while (l < r) {
            int mid = l + r + 1>> 1;
            if (nums[mid] > target) r = mid - 1;
            else l = mid;
        }
        
        if (nums[l] < target) return l + 1;
        else return l;
    }
};

void trimLeftTrailingSpaces(string &input) {
    input.erase(input.begin(), find_if(input.begin(), input.end(), [](int ch) {
        return !isspace(ch);
    }));
}

void trimRightTrailingSpaces(string &input) {
    input.erase(find_if(input.rbegin(), input.rend(), [](int ch) {
        return !isspace(ch);
    }).base(), input.end());
}

vector<int> stringToIntegerVector(string input) {
    vector<int> output;
    trimLeftTrailingSpaces(input);
    trimRightTrailingSpaces(input);
    input = input.substr(1, input.length() - 2);
    stringstream ss;
    ss.str(input);
    string item;
    char delim = ',';
    while (getline(ss, item, delim)) {
        output.push_back(stoi(item));
    }
    return output;
}

int stringToInteger(string input) {
    return stoi(input);
}

int main() {
    string line;
    while (getline(cin, line)) {
        vector<int> nums = stringToIntegerVector(line);
        getline(cin, line);
        int target = stringToInteger(line);
        
        int ret = Solution().searchInsert(nums, target);

        string out = to_string(ret);
        cout << out << endl;
    }
    return 0;
}
发布了245 篇原创文章 · 获赞 89 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_43827595/article/details/104364245