力扣hot100——第2天:4寻找两个正序数组的中位数、5最长回文子串、10正则表达式匹配

news2024/11/29 10:52:32

文章目录

  • 1.4寻找两个正序数组的中位数
    • 1.1.题目
    • 1.2.解答
      • 1.2.1.直接法:合并数组再求结果
      • 1.2.2.分治:无需合并数组
      • 1.2.3.log(n)的解法
  • 2.5最长回文子串
  • 3.10正则表达式匹配
    • 3.1.题目
    • 3.2.解答

1.4寻找两个正序数组的中位数

参考:力扣题目链接;参考题解

1.1.题目

在这里插入图片描述

1.2.解答

1.2.1.直接法:合并数组再求结果

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

直接给出代码如下,很简单:

// 1.真正执行数组合并
double findMedianSortedArrays(vector<int> &nums1, vector<int> &nums2)
{
    // 初始化合并后的新数组
    int size = nums1.size()+nums2.size();
    vector<int> nums(size, 0); 
    int idx1 = 0, idx2 = 0;

    for(int cur = 0; cur < size; cur++)
    {
        // 都没有超过索引,则判断两个数谁更小
        if(idx1 < nums1.size() && idx2 < nums2.size())
            nums[cur] = nums1[idx1] < nums2[idx2] ? nums1[idx1++] : nums2[idx2++];
        // 否则肯定是有一个超过索引了,则只能选择剩下的没有超过索引的数组中的数
        else if(idx1 < nums1.size())
            nums[cur] = nums1[idx1++];
        else 
            nums[cur] = nums2[idx2++];
    }

    // 合并后是奇数长度
    if(size % 2)
        return nums[size / 2];
    
    // 合并后是偶数长度
    return (nums[size/2 - 1] + nums[size/2]) / 2.0;
}

1.2.2.分治:无需合并数组

从上面的代码中可以发现,其实最后结果只用到了合并后数组的中间的一个或者两个数,并不用所有的数组元素。

所以这里可以修改一下代码,只记录最终要的中间的两个数,而不用存储合并后的数组。这样可以把空间复杂度降低到O(1),但是时间复杂度仍然是O(n)。

直接给出代码如下,思想和上一种解法其实是一样的。

// 2.只遍历数组(且只需要遍历一半),不进行数组合并
double findMedianSortedArrays(vector<int> &nums1, vector<int> &nums2)
{
    // 定义两个数记录结果,因为如果有偶数个数则需要求两个数的平均
    int pre = 0;
    int cur = 0;

    // 总长度size,遍历次数就是size/2
    int size = nums1.size() + nums2.size();
    int idx1 = 0, idx2 = 0;   // 两个数组的索引
    for(int i = 0; i <= size/2; i++)
    {
        // 1.更新前一个数
        pre = cur;

        // 2.更新当前的数
        if(idx1 < nums1.size() && idx2 < nums2.size())
            cur = nums1[idx1] < nums2[idx2] ? nums1[idx1++] : nums2[idx2++];
        else if(idx1 < nums1.size())
            cur = nums1[idx1++];
        else 
            cur = nums2[idx2++];
    }

    // 如果是奇数个长度
    if(size % 2)
        return cur;
    
    // 否则是偶数个长度,则返回平均值
    return (pre + cur) / 2.0;
}

1.2.3.log(n)的解法

TODO:力扣要求这种解法,所以是hard难度。

2.5最长回文子串

参考:力扣题目链接;自己的博客解答

3.10正则表达式匹配

参考:力扣题目链接;参考题解

3.1.题目

在这里插入图片描述

3.2.解答

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

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

相关文章

压力串级控制装置用于气动马达的高精度调节

摘要&#xff1a;气动马达作为一种将压缩空气的压力能转换为旋转机械能的装置&#xff0c;其运行的关键是要进行驱动气体压力的控制。本文介绍了目前气动马达压力控制装置的技术现状&#xff0c;特别指出了现有技术中使用电空变换器存在的不足&#xff0c;介绍了电空变换器的更…

深入理解java虚拟机:类加载及执行子系统的案例

文章目录1. 概述2. Tomcat&#xff1a;正统的类加载器结构3. OSGi&#xff1a;灵活的类加载器架构4. 字节码生成技术与动态代理的实现5. Retrotranslator&#xff1a;跨越JDK版本1. 概述 在Class文件格式与执行引擎这部分里&#xff0c;用户的程序能直接影响的内容并不太多&am…

Tableau数据分析数据可视化分析平台

Tableau数据分析&数据可视化分析平台​ 本文章内涉及的资源包以及素材均来自于互联网&#xff0c;仅供大家用来交流学习与研究使用&#xff0c;努力提升自己的一篇文章。各类安装包以及素材版权归属原版权方所有&#xff0c;版权争议与本人无关&#xff0c;用户本人下载后不…

Linux用户操作

用户操作 1、切换用户 root登录 切换到普通用户 howard 命令&#xff1a;su howard 再切换到root用户 一个是执行exit命令&#xff0c;二个是执行su root 查看环境变量 命令&#xff1a;env 切换到Howard用户查看 2、查看用户 查看所有用户 命令&#xff1a;cat …

深入理解Linux网络技术内幕(十)——帧的接收

文章目录前言与其他功能交互设备的开启和关闭队列通知内核帧已接收&#xff1a;NAPI和netif_rxNAPI简介NAPI所用之net_device字段net_rx_action和NAPI新旧驱动程序接口操作poll_list设备驱动程序与内核间的旧接口&#xff1a;netif_rx的第一部分netif_rx的初始任务管理队列以及…

2022最新鸽哒IM即时通讯系统源码 带安卓、苹果、PC端(全开源)+部署教程

提示&#xff1a;即时通讯&#xff0c;纯原生开发&#xff0c;各种功能应有尽有 内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 提示&#xff1a;即时通讯&#xff0c;纯原生开发&#xff0c;各种功能应有尽有 鸽哒是一款类似于v的即时…

供应生物素PEG衍生物试剂Biotin-PEG-NHS,NHS-PEG-Biotin,生物素PEG活性酯

1、名称 英文&#xff1a;Biotin-PEG-NHS&#xff0c;NHS-PEG-Biotin 中文&#xff1a;生物素-聚乙二醇-活性酯 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Biotin PEG NHS ester PEG 4、分子量&#xff1a;可定制&#xff0c;活性酯-聚乙二醇2-生物素&#xff0c…

Java RMI 远程代码执行漏洞

0x01 漏洞描述 - Java RMI 远程代码执行漏洞 - Java RMI服务是远程方法调用&#xff0c;是J2SE的一部分&#xff0c;能够让程序员开发出基于JAVA的分布式应用。一个RMI对象是一个远程Java对象&#xff0c;可以从另一个Java虚拟机上&#xff08;甚至跨过网络&#xff09;调用它…

SpringBoot项目打印接口请求日志,CommonsRequestLoggingFilter实现方式

文章目录需求背景效果图实现思路其他方案对比优缺点分析具体实现需求背景 线上项目出现bug时&#xff0c;可以通过接口的请求参数来排查定位问题。和业务方battle时&#xff0c;能够回怼他是自己操作的问题。 效果图 实现思路 Spring提供了CommonsRequestLoggingFilter过滤器…

opengl,opengl es,egl,glfw,glew

OpenGL ES之GLFW窗口搭建 - Plato - 博客园概述 本章节主要总结如何使用GLFW来创建Opengl窗口。主要包括如下内容&#xff1a; OpenGl窗口创建介绍 GLFW Window版编译介绍 GLFW简单工程源码介绍 OpenGL窗口创建介绍 能用于Ohttps://www.cnblogs.com/feng-sc/p/5093262.htmlOp…

事务-P26,P27

事务&#xff1a;要么都成功&#xff0c;要么都失败。例子&#xff1a;支付宝交易。 acid原则。 11直接移植10的代码 spring-11-transaction&#xff1a; UserMapper&#xff08;增加两个接口&#xff09; package com.Li.mapper;import com.Li.pojo.User;import java.util.…

C# 消息 界面卡顿 界面进程 工作进程

一 消息 消息与消息循环&#xff0c;是所有的GUI开发里共同的概念&#xff1a; 消息Message,有的地方也叫事件&#xff1b; ① 鼠标消息&#xff1b; ② 键盘消息&#xff1b; ③ 绘制事件&#xff1b; ④ 窗口最大化、最小化&#xff1b; 1 消息循环 消息循环&#xff0c;M…

10道不得不会的缓存面试题【缓存】

博主介绍&#xff1a; &#x1f680;自媒体 JavaPub 独立维护人&#xff0c;全网粉丝15w&#xff0c;csdn博客专家、java领域优质创作者&#xff0c;51ctoTOP10博主&#xff0c;知乎/掘金/华为云/阿里云/InfoQ等平台优质作者、专注于 Java、Go 技术领域和副业。&#x1f680; 最…

使用Conda

0. Anaconda Prompt 命令提示符 0.1 验证conda是否被安装 conda --version0.2 conda管理环境 可以用命令复制和删除环境 参考. 1. Conda管理包 1.1 常用包管理功能 查找包查看包安装包 查找分为精确查找和模糊查找&#xff0c;如下图所示 卸载包更新包 1.2 conda管理环…

【实习之velocity】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、图示二、应用场景1.Web应用程序&#xff1a;作为为应用程序的视图&#xff0c;显示数据2.源代码生成&#xff1a;Velocity可用于基于模板生成java源代码3.自…

[c++基础]-vector类

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、 vect…

scanf导致程序运行时出现stack smashing

一 栈溢出stack smashing 程序在运行期间破坏了已在操作系统里定义好的栈边界&#xff0c;这种行为具有破坏性&#xff0c;操作系统使用stack smashing detect机制来检测栈溢出。 二 栈溢出简单例子 实例一&#xff1a; #include <stdio.h> #include <stdlib.h>…

基于智能优化算法实现的机械臂避障路径规划(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 针对目前空间机械臂避障路径规划算法计算量大难以达到在线实时规划的缺点,对空间机械臂的在线实时避障路径规划问题进行了研究和…

计算机四级网络-网络技术-第六章 网络管理与网络安全

6.1 网络管理技术 CMIP 采用委托监控机制。 CMIP协议是由IS0组织制定的一种管理协议。管理进程根据事件发生时对网络服务影响的大小来划分事件的严重等级&#xff0c;然后再产生相应的故障处理方案。CMIP的所有功能都要映射到应用层的相关协议上实现。操作和事件报告是通过远…

如何使用腾讯会议录屏?腾讯会议不允许录屏怎么办?这个方法教你解决

​近年来&#xff0c;线上活动越来越活跃&#xff0c;很多人都开始使用腾讯会议进行开会、网课教学等活动。很多人希望使用腾讯会议进行录屏。那么如何使用腾讯会议录屏&#xff1f;腾讯会议不允许录屏怎么办&#xff1f;这个方法教你解决&#xff01; 一、如何使用腾讯会议录屏…