力扣刷题 DAY_0 前言

总述

1.刷题计划

采用知乎用户"代码随想录"的力扣刷题顺序,题目顺序安排较合理,只需跟着一道一道刷即可。

刷题顺序地址

GitHub地址:https://github.com/youngyangyang04/leetcode-master 。

Gitee地址:programmercarl/leetcode-master(代码随想录出品)

2.代码风格

本人目前采用C++刷题(后期也有换Python刷题的一小点可能)。

根据本人写C++的风格:

(1)变量命名采用小驼峰方式,结构体或者类名采用大驼峰方式,函数命名采用下划线方式。

(2)操作符(+ - * / = )左右有空格,分隔符( , 和 ; )前一位没有空格,后一位保持空格。

(3)控制语句(while if for)后面跟一个空格,再接括号。

2.ACM模式、leetcode模式和本地编译运行

首先要说最常见的ACM模式,这是大多数刷题网站和企业面试所采用的模式。就是自己构造输入数据格式,把要需要处理的容器填充好,OJ不会给你任何代码,它只会给你输入样例和输出样例,包括include哪些函数都要自己写,最后也要自己控制返回数据的格式。在这种情况下,我们需要在本地将代码完整地写好并通过所给样例,然后提交之。

而leetcode模式是核心代码模式。就是把要处理的数据都已经放入容器里,可以直接写逻辑。这样就产生了问题:leetcode上的代码如何调试呢?要通过本地编译运行的方式吗?

一般调试就是直接在力扣上打日志,偶尔需要把代码粘到本地来运行添加日志debug一下。在力扣上直接打日志,C++的话想打啥直接cout啥就可以了。

力扣上的代码在本地编译运行的方式,以力扣746举例。在力扣上,我们已经写好核心代码:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        vector<int> dp(cost.size());
        dp[0] = cost[0];
        dp[1] = cost[1];
        for (int i = 2; i < cost.size(); i++) {
            dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i];
        }
        return min(dp[cost.size() - 1], dp[cost.size() - 2]);
    }
};

这是构造了一个类Solution的方法,我们只需在本地把需要的头文件补齐,然后在main函数中构造对应的输入数据,再创建一个solution调用该方法即可。

#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        vector<int> dp(cost.size());
        dp[0] = cost[0];
        dp[1] = cost[1];
        for (int i = 2; i < cost.size(); i++) {
            dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i];
        }
        return min(dp[cost.size() - 1], dp[cost.size() - 2]);
    }
};

int main() {
    int a[] = {1, 100, 1, 1, 1, 100, 1, 1, 100, 1};
    vector<int> cost(a, a + sizeof(a) / sizeof(int));
    Solution solution;
    cout << solution.minCostClimbingStairs(cost) << endl;
}


版权声明:本文为jgsecurity原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。