leetcode 3.5

普通数组

1.最大子数组和

最大子数组和
前缀和pre + 动态规划
pre保留的是当前包含了当前遍历的最大的前缀和,如果之前的pre 对结果有增益效果,则 pre 保留并加上当前遍历, 如果pre 对结果无增益效果,需要舍弃,则 pre 直接更新为当前遍历数字;
每次比较 pre 和 maxAns的大小,将最大值置为maxAns,遍历结束返回结果。
时间复杂度:O(n)

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int n = nums.size();
        if (n == 1) return nums[0];
        int pre = 0, maxAns = nums[0];
        for (int i = 0; i < n; i++) {
            pre = max(pre + nums[i], nums[i]);
            maxAns = max(maxAns, pre);
        }
        return maxAns;
    }
};

普通数组

1.除自身以外数组的乘积

前缀和 * 后缀和
前缀和 = 前一个元素 * 前两个元素前缀和
用一个遍历来跟踪右边元素的乘积。并更新数组 answer[i]=answer[i]∗R。然后 R 更新为 R=R∗nums[i],其中变量 R 表示的就是索引右侧数字的乘积。

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int> ans(n, 1);
        int pre = 1, back = 1;
        for (int i = 1; i < n; i++) {
            ans[i] *= nums[i - 1] * ans[i - 1];
        }
        for (int i = n - 2; i >= 0; i--) {
            back *= nums[i + 1];
            ans[i] *= back;
        }
        return ans;
    }
};

矩阵

1.矩阵置零

矩阵置零
先用两个for记录出现0的行和列,再用两个for去标记出现0的所有行列元素
时间复杂度:O(mn),其中 mmm 是矩阵的行数,nnn 是矩阵的列数。我们至多只需要遍历该矩阵两次。
空间复杂度:O(m+n),其中 mmm 是矩阵的行数,nnn 是矩阵的列数。我们需要分别记录每一行或每一列是否有零出现。

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int n = matrix.size();
        int m = matrix[0].size();
        vector<int> row(n, 0), col(m, 0);
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (matrix[i][j] == 0)
                    row[i] = col[j] = 1; 
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (row[i] || col[j])
                    matrix[i][j] = 0;
            }
        }
    }
};

2.螺旋矩阵

可以将矩阵看成若干层,首先输出最外层的元素,其次输出次外层的元素,直到输出最内层的元素。
在这里插入图片描述

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int n = matrix.size();
        int m = matrix[0].size();
        vector<int> ans;
        int u = 0, d = n - 1;
        int l = 0, r = m - 1;
        while (true) {
            //左->右
            for (int i = l; i <= r; i++) {
                ans.push_back(matrix[u][i]);
            }
            u++;
            if (u > d) break;

            //上->下
            for (int i = u; i <= d; i++) {
                ans.push_back(matrix[i][r]);
            }
            r--;
            if(r < l) break;

            //右->左
            for (int i = r; i >= l; i--) {
                ans.push_back(matrix[d][i]);
            }
            d--;
            if(d < u) break;

            //下->上
            for (int i = d; i >= u; i--) {
                ans.push_back(matrix[i][l]);
            }
            l++;
            if(l > r) break;
        }
        return ans;
    }
};
配置 LeetCode 插件的方法因开发工具的不同而有所差异,以下是一些主流 IDE 中配置 LeetCode 插件的详细步骤。 ### 3.1 IntelliJ IDEA 中安装和配置 LeetCode 插件 IntelliJ IDEA 是 Java 开发者常用的集成开发环境(IDE),支持通过插件扩展功能。以下是安装和配置 LeetCode 插件的步骤: 1. 打开 IntelliJ IDEA,进入 `Settings`(设置)界面(快捷键为 `Ctrl + Alt + S`)。 2. 在左侧菜单中选择 `Plugins`,在搜索框中输入 `LeetCode`。 3. 找到 `LeetCode Editor` 插件,点击 `Install` 进行安装。 4. 安装完成后,重启 IntelliJ IDEA。 5. 配置插件时,需要登录 LeetCode 账号。打开插件设置界面,输入 LeetCode 账号和密码,并选择编程语言(如 Java、Python、C++ 等)。 6. 配置完成后,即可在插件界面中查看题目、编写代码并提交解答[^1]。 ### 3.2 VSCode 中快速配置 LeetCode 插件 Visual Studio Code(VSCode)是一款轻量级但功能强大的编辑器,通过扩展可以实现 LeetCode 插件的功能。 1. 下载并安装 [LeetCode 扩展](https://marketplace.visualstudio.com/items?itemName=leetcode.vscode-leetcode)。 2. 安装 Node.js,确保系统中已配置好 Node.js 环境。可以从 [Node.js 官网](https://nodejs.org/)下载并安装。 3. 打开 VSCode,进入 `设置`(Settings)界面,选择 `Extensions`,找到 `leetcode` 插件进行配置。 4. 在插件设置中,选择编程语言(如 C++、Python、Java 等),并登录 LeetCode 账号。 5. 配置完成后,即可在 VSCode 中直接查看 LeetCode 题目并编写代码[^2]。 ### 3.3 VSCode 中配置 LeetCode 插件以支持 C++ 对于 C++ 开发者,可以在 VSCode 中配置 LeetCode 插件以支持调试功能。 1. 安装 [leetcode-debug](https://github.com/aiyolo/leetcode-debug) 插件。 2. 配置调试环境时,需要安装 GDB 或 LLDB 调试器,并在 `launch.json` 文件中添加调试配置。 3. 在 `tasks.json` 文件中配置编译任务,确保可以正确编译 C++ 代码。 4. 完成上述配置后,即可在 VSCode 中使用 LeetCode 插件进行 C++ 题目的调试和运行[^3]。 ### 3.4 CLion 中配置 LeetCode 插件时的 CMake 报错问题 CLion 是 JetBrains 推出的 C/C++ IDE,支持通过插件扩展功能。但在配置 LeetCode 插件时,可能会遇到 CMake 报错问题。 1. 如果出现 `CMake Error at CMakeLists.txt:8 (add_executable)` 错误,通常是因为目标名称不合法。 2. 检查 `CMakeLists.txt` 文件中的 `add_executable` 命令,确保目标名称不包含非法字符(如 `[`、`]` 等)。 3. 修改目标名称,确保其符合 CMake 的命名规范。 4. 保存修改后的 `CMakeLists.txt` 文件,并重新加载 CMake 配置。 5. 完成上述步骤后,应该可以正常编译和运行 LeetCode 插件生成的 C++ 代码[^4]。 ### 3.5 示例代码:LeetCode 插件中常用的 C++ 调试代码 以下是一个简单的 C++ 示例代码,用于 LeetCode 插件中的调试: ```cpp #include <iostream> #include <vector> #include <unordered_map> using namespace std; class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> numMap; for (int i = 0; i < nums.size(); ++i) { int complement = target - nums[i]; if (numMap.find(complement) != numMap.end()) { return {numMap[complement], i}; } numMap[nums[i]] = i; } return {}; } }; int main() { Solution solution; vector<int> nums = {2, 7, 11, 15}; int target = 9; vector<int> result = solution.twoSum(nums, target); cout << "Result: [" << result[0] << ", " << result[1] << "]" << endl; return 0; } ``` 该代码实现了 LeetCode 中的经典题目 **Two Sum**,可以在支持调试的 LeetCode 插件中运行并调试。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值