当前位置: 首页 > news >正文

力扣热题100——数组

最大子数组和

在这里插入图片描述

class Solution {
public:int maxSubArray(vector<int>& nums) {int n = nums.size();if (n == 0) return 0;int pre = nums[0]; // 保存以当前元素前一个元素结尾的最大子数组和int maxSum = pre;for (int i = 1; i < n; ++i) {pre = max(pre + nums[i], nums[i]);maxSum = max(maxSum, pre);}return maxSum;}
};

合并区间

在这里插入图片描述

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> res;sort(intervals.begin(),intervals.end());for(int i=0;i<intervals.size();){int last=intervals[i][1];int j=i+1;while(j<intervals.size()&&intervals[j][0]<=last){last=max(last,intervals[j][1]);j++;}res.push_back({intervals[i][0],last});i=j;}return res;}
};

轮转数组

在这里插入图片描述

class Solution {
public:void rotate(vector<int>& nums, int k) {int n=nums.size();k%=n;reverse(nums.begin(),nums.end());reverse(nums.begin(),nums.begin()+k);reverse(nums.begin()+k,nums.end());}
};

除自身以外数组的乘积

在这里插入图片描述

#include <vector>
using namespace std;class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> result(n, 1);  // 替换错误的数组定义,使用vector//result[1,1,1,1]// 计算前缀积:result[i] 存储 nums[0..i-1] 的乘积for (int i = 1; i < n; ++i) {result[i] = result[i - 1] * nums[i - 1];}// 计算后缀积并与前缀积相乘,得到最终结果int suffix = 1;  // 用于存储后缀积for (int i = n - 1; i >= 0; --i) {result[i] *= suffix;  // 前缀积 × 后缀积suffix *= nums[i];    // 更新后缀积}return result;}
};

第一个循环的作用是:计算当前元素左侧所有元素的乘积

  for (int i = 1; i < n; ++i) {result[i] = result[i - 1] * nums[i - 1];}

假设输入为【2,3,4,5】
当 i=1 时:
result[1] = result[0] * nums[0] = 1 * 2 = 2
此时 result = [1, 2, 1, 1]
(表示索引 1 左侧只有元素 2)
当 i=2 时:
result[2] = result[1] * nums[1] = 2 * 3 = 6
此时 result = [1, 2, 6, 1]
(表示索引 2 左侧元素是 2 和 3,乘积为 6)
当 i=3 时:
result[3] = result[2] * nums[2] = 6 * 4 = 24
此时 result = [1, 2, 6, 24]
(表示索引 3 左侧元素是 2、3、4,乘积为 24)
第二个循环:计算后缀积并合并结果(从右到左)

int suffix = 1;  // 用于存储后缀积for (int i = n - 1; i >= 0; --i) {result[i] *= suffix;  // 前缀积 × 后缀积suffix *= nums[i];    // 更新后缀积}

当 i=3 时:
第一步:result[3] *= suffix → 24 * 1 = 24
(索引 3 右侧没有元素,后缀积为 1)
第二步:suffix *= nums[3] → 1 * 5 = 5
此时 result = [1, 2, 6, 24],suffix = 5
当 i=2 时:
第一步:result[2] *= suffix → 6 * 5 = 30
(索引 2 右侧元素是 5,乘积为 5)
第二步:suffix *= nums[2] → 5 * 4 = 20
此时 result = [1, 2, 30, 24],suffix = 20
当 i=1 时:
第一步:result[1] *= suffix → 2 * 20 = 40
(索引 1 右侧元素是 4、5,乘积为 20)
第二步:suffix *= nums[1] → 20 * 3 = 60
此时 result = [1, 40, 30, 24],suffix = 60
当 i=0 时:
第一步:result[0] *= suffix → 1 * 60 = 60
(索引 0 右侧元素是 3、4、5,乘积为 60)
第二步:suffix *= nums[0] → 60 * 2 = 120
最终 result = [60, 40, 30, 24]

缺失的第一个证书

在这里插入图片描述

class Solution {
public:int firstMissingPositive(vector<int>& nums) {unordered_set<int> numset;for(int num:nums){if(num>0)numset.insert(num);}int i=1;while(true){if(numset.find(i)==numset.end()){return i;}i++;}       }
};
http://www.dtcms.com/a/313938.html

相关文章:

  • 关于Npm和Nvm的用法
  • 华为云产品图解
  • falsk windows 服务器部署-解决服务器外无法访问
  • 零售行业线上线下融合趋势,华为云智能零售解决方案,在门店运营与电商业务中的技术应用与场景实践
  • LLM大模型时代:生活服务领域的“生存革命“与新生态重构
  • [论文阅读] 人工智能 + 教学 | 从代码到职业:用机器学习预测竞赛程序员的就业潜力
  • FLutter 如何在跨平台下实现国际化多语言开发
  • 安全扫描:目标使用过期的TLS1.0 版协议问题
  • Spring AI Alibaba Graph 深度解析:原理、架构与应用实践
  • 尚硅谷2025最新SpringCloud速通-操作步骤(详细)
  • [复习]计算机网络
  • 从原始 Import/Export 到 wasm-bindgen 与自定义 Section
  • Ethereum:拥抱开源,OpenZeppelin 未来的两大基石 Relayers 与 Monitor
  • 嵌入式硬件中三极管推挽电路控制与实现
  • 模型蒸馏(Distillation):原理、算法、应用
  • 突破Transformer局限!MICN:线性复杂度实现时序预测新高度
  • LeetCode 132:分割回文串 II
  • 作物生长模型Oryza V3实战19:场景模拟常见问题及解决
  • Redis7基数统计(HyperLogLog)深度分析
  • PostGIS面试题及详细答案120道之 (091-100 )
  • 读懂Node Exporter采集数据的原理
  • Spring Boot + ShardingSphere 实现分库分表 + 读写分离实战
  • day15 SPI
  • PE 方法中的海面边界建模:光滑与粗糙海面条件解析
  • Android JUnit 测试框架详解:从基础到高级实践
  • C 语言枚举、typedef 与预处理详解
  • TinUI较复杂面板布局演示
  • 使用1panel将http升级至https的过程
  • 8.高斯混合模型
  • Next Terminal 实战:内网无密码安全登录