LeetCode 热题 100 | 普通数组

news2024/10/6 10:42:44

目录

1  53. 最大子数组和

2  56. 合并区间

3  189. 轮转数组

4  238. 除自身以外数组的乘积

5  41. 缺失的第一个正数


菜鸟做题第二周,语言是 C++

1  53. 最大子数组和

题眼:“子数组是数组中的一个连续部分。”

遍历数组,问每一个元素 “你愿不愿意和前面那伙人一起干啊”,如果该元素不愿意,那么就让它另起炉灶。那该元素的评判标准是什么呢?当然是评估搭伙和单干哪个更好啦。具体来说,就是评估自己本身的值和求和后的值哪个大。如下图所示:

比如:对于元素 1,它自己的值是 1,加上 -2 后是 -1,那它当然更愿意自立门户啦。对于元素 4,它自己的值是 4,加上(1 和 -3)后是 2,那它当然也更愿意自立门户。

解题的关键就在于子数组是连续的,每个元素都只能选择要不要和自己前面的那伙人一起。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
       int pre = 0, maxAns = nums[0];
        for (const auto &x: nums) {
            pre = max(pre + x, x);
            maxAns = max(maxAns, pre);
        }
        return maxAns;
    }
};

一开始我想学以致用,把子数组的和转换为前缀和的差,但实际上不太行。具体来说,就是我想找最大前缀和来减最小前缀和,认为它们之差对应的子数组的和就是最大的。但问题在于,最大前缀和可能比最小前缀和短,对应于它们之差的子数组是不存在的。

2  56. 合并区间

解题思路:

  1. 首先按区间的左端大小为它们排序
  2. 定义左指针 left 和右指针 right
  3. 固定 left,让 right 从左往右寻找可以合并的区间
  4. 当找不到时,存入合并后的区间并移动 left

思路说明图:

我们以 (0, 3) 开始找能够与它合并的区间。合并的条件是什么呢?答案是:只要其他区间的左值小于 (0, 3) 的右值即可。这些区间又分为两类:一类是被 (0, 3) 包含的,比如 (0, 1);另一类是没有被包含的,比如 (2, 5)。对于被包含的区间,我们不用理它;对于没有被包含的区间,我们比较它的右值和当前的 right 谁大,取较大值来更新 right 。

由于是扫描到不能合并的区间为止,因此下一轮我们直接从那个区间,即 (10, 11) 开始寻找,而不是从 (0, 3) 的下一个,即 (0, 1) 开始寻找。

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        int n = intervals.size();
        sort(intervals.begin(), intervals.end());
        vector<vector<int>> ans;

        int i = 0, left, right;
        while (i < n) {
            left = intervals[i][0];
            right = intervals[i][1];
            while (i < n && intervals[i][0] <= right) {
                right = max(right, intervals[i][1]);
                ++i;
            }
            ans.push_back({left, right});
        }

        return ans;
    }
};

3  189. 轮转数组

由于没有额外的要求,因此搞个临时数组装好了再替换回去即可:

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> rotate(n);

        for (int i = 0; i < n; ++i) {
            rotate[(i + k) % n] = nums[i];
        }
        nums = rotate;
    }
};

4  238. 除自身以外数组的乘积

解题思路:

  1. 从左往右遍历,计算并存储所有的前缀乘积
  2. 从右往左遍历,计算并存储所有的后缀乘积
  3. 最后对应相乘,即为结果
class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int> left(n), right(n), ans(n);

        // 从左往右
        int pre = 1;
        left[0] = pre;
        for (int i = 0; i < n - 1; ++i) {
            pre *= nums[i];
            left[i + 1] = pre;
        }

        // 从右往左
        int post = 1;
        right[n - 1] = post;
        for (int i = n - 1; i >= 1; --i) {
            post *= nums[i];
            right[i - 1] = post;
        }

        // 对应相乘
        for (int i = 0; i < n; ++i) {
            ans[i] = left[i] * right[i];
        }
        return ans;
    }
};

5  41. 缺失的第一个正数

解题思路:

  1. 把 nums 中的所有数存入集合 set 中
  2. 从正整数 1 开始在 set 中查找
  3. 找不到的即为缺失的第一个正整数

我觉得我这个逻辑比较清晰,就是执行时间比较长。

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        unordered_set<int> set;
        for (auto &n:nums) {
            set.insert(n);
        }
        int min = 1;
        while (set.find(min) != set.end()) {
            ++min;
        }
        return min;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1412178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EIGRP实验

实验大纲 一、基本配置 1.构建网络拓扑结构图 2.路由器基本配置 3.配置PC 4.测试连通性 5.保存配置文件 二、配置EIGRP 1.查看路由表 2.配置EIGRP动态路由 3.查看路由器路由表 4.测试网络连通性 5.查看所有路由器的路由协议 6.保存配置文件 三、配置OSPF 1.配置…

【基于电商履约场景的 DDD 实战】DDD领域驱动设计的优势分析以及与MVC架构对比

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复…

LeetCode.2859. 计算 K 置位下标对应元素的和

题目 题目链接 分析 这道题的题意很明确。就是求每一个下标的二进制中1的个数为k的下标所对应的元素值之和。 Java 中有 库函数 Integer.bitCount(num)&#xff0c;这个函数的返回值就是 num 中 1 的个数。 代码 class Solution {public int sumIndicesWithKSetBits(List…

如何训练和导出模型

介绍如何通过DI-engine使用DQN算法训练强化学习模型 一、什么是DQN算法 DQN算法&#xff0c;全称为Deep Q-Network算法&#xff0c;是一种结合了Q学习&#xff08;一种价值基础的强化学习算法&#xff09;和深度学习的算法。该算法是由DeepMind团队在2013年提出的&#xff0c;…

开发板连接错误: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

1.出现错误 scp rkmedia_vi_venc_rtsp_test_sp root192.168.10.198:/home/sunpeng出现错误 2.错误原因&#xff1a;警告&#xff1a;远程主机标识已更改&#xff01; 1&#xff09;重新烧录开发板系统&#xff0c;导致IP地址变化。 2&#xff09;报警错误-中文&#xff08;警…

每日一练 | 华为认证真题练习Day172

1、关于OSPF的ASBR-SUMMARY-LSA中LSA头部他、信息描述错误的是 A. LINK STATE ID表示ASBR的ROUTER ID B. ADVERTISING ROUTER表示该ABR的ROUTER ID C. ADVERTISING ROUTER字段永远不会改变 D. METRIC表示该ABR到达ASBR的OSPF开销 2、关于OSPF外部路由种类描述错误的是 A. …

力扣354. 俄罗斯套娃信封问题

动态规划 思路&#xff1a; 同时控制 w、h 两个维度比较复杂&#xff0c;可以先固定一个维度&#xff0c;来找出另外一个维度的严格单调序列&#xff1a; 对 w 排序&#xff0c;然后再来找 h 维度严格单调递增序列长度&#xff1b;在 w 排序时&#xff0c;会遇到 w(i) w(j) 的…

字节发布MagicVideo2文本生成视频模型,一句话便可生成动态视频

文生图大模型已经火了很长一段时间了&#xff0c;而随着技术与模型算法的不断提升&#xff0c;文生视频模型也越来越多。今天就介绍一下字节跳动发布的MagicVideo-V2文生视频大模型。 文生图的大火对文本生成高保真视频的需求也不断增长&#xff0c;正是这种需求的增加&#xf…

李国武老师解读QFD:从理论到实践的全面指南

QFD&#xff0c;即质量功能展开&#xff08;Quality Function Deployment&#xff09;&#xff0c;是一种将客户需求转化为产品设计要求和生产要求的系统方法。在当今市场竞争激烈的环境下&#xff0c;如何将客户的声音转化为产品优势&#xff0c;是每一个制造企业都需要面对的…

域名的安全性如何提高?

域名&#xff08;Domain Name&#xff09;是互联网上的一种层次结构式的字符标识&#xff0c;对应于计算机的互联网协议&#xff08;IP&#xff09;地址。域名是由一串用点分隔的名字组成的&#xff0c;它可以方便地在数据传输时标识计算机的电子方位。域名的作用在于提供易于记…

超级万能DIY模块化电商小程序源码系统 带完整的搭建教程

随着电商市场的不断扩大&#xff0c;越来越多的商家涌入电商平台&#xff0c;竞争愈发激烈。为了在众多竞争对手中脱颖而出&#xff0c;商家需要打造一款个性化、功能强大的电商小程序&#xff0c;以吸引更多的用户。而超级万能DIY模块化电商小程序源码系统正是为了满足商家的这…

已经写好代码,领导让我重写测试代码,我要不要提桶跑路?

我有一个朋友&#xff0c;有一天问我这样的一个问题&#xff1a;“说现在他们公司有五个 python 测试工程师。但是有一天领导要求他把所有的自动化测试代码&#xff0c;全部都转化成 Java 语言。” 虽然说他们在行动上还是接受了领导的任务&#xff0c;但是他一直想不清楚&…

免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务bbc

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

2024亚马逊开店教程:开店准备与注册流程指南

随着新一年的到来&#xff0c;亚马逊开启了新一轮的卖家入驻&#xff0c;并且针对新卖家优化了入驻流程&#xff0c;下面为大家简单整理一下最新亚马逊入驻教程&#xff0c;有想要入驻开店的小伙伴速速看过来&#xff01; 一、开店前准备 1、账号环境准备 为了防止账号由于网…

【华为 ICT HCIA eNSP 习题汇总】——题目集8

1、在VRP平台下&#xff0c;关于各个协议的外部优先级的描述&#xff0c;正确的是&#xff08;&#xff09;。 A、OSPF路由的外部优先级是15 B、IS-IS路由的外部优先级是10 C、静态路由的外部优先级是60 D、BGP路由的外部优先级是20 考点&#xff1a;路由技术原理 解析&#xf…

OpenCV图像的基本操作

图像的基本操作&#xff08;Python&#xff09; 素材图 P1&#xff1a;die.jpg P2&#xff1a;cool.jpg V&#xff1a;rabbit.mp4&#xff0c; 下载地址 读取展示-图像 import cv2img_1 cv2.imread(./die.jpg) # default cv2.IMREAD_COLOR print("die.jpg shape(imre…

26.各品类中商品价格的中位数(ceil与floor函数)

题目&#xff1a; 题解&#xff1a; --这道题主要考察中位数的取法 SELECT category_id,cast(sum(price)/count(1) as DECIMAL(16,2)) medprice from( SELECTcategory_id,price,rn,max(rn)over(partition by category_id) max_rn from(SELECTcategory_id,price,row_number() …

音频格式之AAC:(3)AAC编解码原理详解

系列文章目录 音频格式的介绍文章系列&#xff1a; 音频编解码格式介绍(1) ADPCM&#xff1a;adpcm编解码原理及其代码实现 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#xff1a;(1)MP3封装格式简介 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#x…

工业交换机的OAM功能有哪些?

OAM&#xff08;Operations, Administration, and Maintenance&#xff09;是工业交换机中的一种功能&#xff0c;用于管理和维护网络的操作、管理和维护任务。它提供了以下功能&#xff1a; 1. 连通性检测&#xff1a;OAM可以监测和检测交换机与其他网络设备之间的连通性&…

如何在外远程访问家中本地威联通QNAP NAS

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 前言 购入威联通NAS后&#xff0c;很多用户对于如何在外在公网环境下的远程访问威联通NAS…