leetcode(hot100)13-17

解题思路:前缀和 动态规划

主要思路利用前缀和 然后前缀和sum-minsum等于最终的结果 minsum怎么求呢 minsum=min(minsum,sum)

因为sum的前缀和有可能为负值 如果负值的话就取负值如果是正值就取0minsum;

cpp 复制代码
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int result = INT_MIN,sum = 0,minsum = 0;
        for(int i = 0;i<nums.size();i++){
            sum += nums[i];
            result = max(result,sum-minsum);
            minsum = min(minsum,sum);
        }
        return result;
        
    }
};

解题思路:

首先排序 二维数组排序只排第一列 然后 result.back()1 = max(result.back()1,right);right=intervalsi1,right就是右边界

cpp 复制代码
class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        if(intervals.size() == 0)return {};
        sort(intervals.begin(),intervals.end());
        vector<vector<int>>result;
        for(int i = 0;i<intervals.size();i++){
            int left = intervals[i][0],right = intervals[i][1];
            if(!result.size() || result.back()[1] < left){
                result.push_back({left,right});
            }
            else{
                result.back()[1] = max(result.back()[1],right);
            }
        }
        return result;
    }
};

解题思路:反转

注意本题没有保证 k 小于数组长度 n。由于轮转 n 次等于没有轮转,轮转 n+1 等于轮转 1 次,依此类推,轮转 k 次等于轮转 kmodn 次。

先反转全部,然后在反转前k个 然后在反转后面所有的;

cpp 复制代码
class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        k %= nums.size();
        reverse(nums.begin(),nums.end());
        reverse(nums.begin(),nums.begin()+k);
        reverse(nums.begin()+k,nums.end());

    }
};

解题思路:相当于前后缀分解

把这个自身的左边和右边分为两个部分,然后用两个for循环分别表示左边的成绩和右边的成绩

cpp 复制代码
class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int>suf(n,1);
        for(int i = n-2;i>=0;i--){
            suf[i] = suf[i+1]*nums[i+1];

        }
        int pre = 1;
        for(int i = 0;i<n;i++){
            suf[i] *= pre;
            pre *= nums[i];
        }
        return suf;
    }
};

解题思路:将数组视为哈希表 我们将所有1到n范围内的数放入哈希表中,也可以得到最终的答案。将数组下标从 0 开始)打上「标记」。

首先将所有的负数都变为n+1 因为n+1肯定不会被找到

然后将所有<n的数变为负数 返回第一个大于0下标+1

cpp 复制代码
class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0;i< n;i++){
            if(nums[i] <= 0){
                nums[i] = n+1;
            }
        }
        for(int i = 0;i<n;i++){
            int num = abs(nums[i]);
            if(num <= n){
                nums[num-1] = -abs(nums[num-1]);
            }
        }
        for(int i = 0;i<n;i++){
            if(nums[i]>0){
                return i+1;
            }
        }
        return n+1;
    }
};
相关推荐
KaMeidebaby4 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
8Qi85 小时前
LeetCode 235. 二叉搜索树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·二叉搜索树·lca·迭代
bIo7lyA8v5 小时前
算法稳定性分析中的随机扰动建模的技术8
算法
科研online6 小时前
基于多源数据和XGBoost-SHAP分析中国大陆绿地碳汇空间变异影响因素的非线性相关性与尺度差异
算法·学习方法
Cthy_hy6 小时前
拓扑排序超详解:原理 + Kahn 贪心算法
python·算法·贪心算法
三品吉他手会点灯6 小时前
C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍
c语言·笔记·学习·算法
VkN2X2X4b6 小时前
算法复杂度的实验验证与误差分析的技术8
算法
其利天下技术7 小时前
风扇灯无刷电机自适应算法实战指南
算法·cocos2d·无刷电机自适应算法·bldc驱动自适应算法·其利无刷电机驱动算法
8Qi87 小时前
LeetCode 494:目标和(Target Sum)—— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
hujinyuan201607 小时前
2026年3月 中国电子学会青少年软件编程(Python)三级考试试卷 真题及答案
java·python·算法