【数据结构与算法】LeetCode 每日三题

如果你已经对数据结构与算法略知一二,现在正在复习数据结构与算法的一些重点知识
-------------------------------------------------------------------------------------------------------------------------
点赞+收藏🌈,每天更新总结文章(多以图文形式,方便记忆,均为网上搜集资料以及AI)⭐
-------------------------------------------------------------------------------------------------------------------------
时间:2025/5/23/ 19: 40分
-----------------------------------

种一棵树最好的机会是十年前,其次是现在
博主链接:黎明smaly-CSDN博客
快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区


一、LeetCode 283.移动零

方法一:

  1. 题目中,要求我们在原数组进行原地操作,所以先排除哈希这些
  2. 一般对于数组的题,要求原地进行的,首先考虑双指针
  3. 这道题我们采用双指针,我们定义一个左指针和一个右指针,这里的指针可以采用下标的方式进行,而不是真正意义上的指针变量
  4. 左右指针同时指向第一个元素
  5. 右指针先走,如果碰到0,继续走++,如果碰到非0,也就是我们要的元素,则将他赋值给左指针对应的元素,左指针才走++
  6. 走到右指针走到结尾为止,这样,我们就拿到了所有的非0元素,并且相对顺序不变
  7. 只不过 后面的元素还不是0,最好我们需要把循环方式把剩下的元素赋值成0

代码:


时间复杂度:

                O(N) N是数组的长度

空间复杂度:

                O(1)

二、LeetCode 11.盛最多水的容器

方法一:

  1. 看到跟数组相关的,又是求某个阶段最大/最小值问题的,我们可以考虑贪心算法
  2. 我们还是采用双指针的方式,左,右指针,左指针指向开头,右指针指向结尾
  3. 此时这两个指针间,最大可容纳水为 min(1,7)*8 = 1*8=8 (按示例图来的)
  4. 然后我们将这个最大值记录下来,此时就知道了一个局部解
  5. 移动指针,移动数字小的那个指针,只有数字小的移动,才能找到更大值,不然最大空间一直卡在了数字小的上面,因为有瓶颈
  6. 移动完继续计算最大可容纳水量 min(8, 7) * 7 = 1*7 = 7
  7. 此时又拿到了一个局部解,将其与上一次的进行判断,大的存到我们定义的最大值变量里面,等下一次判断继续用
  8. 不断这样循环,如果两个指针值相同,那么可以随便移动一个
  9. 直到左右指针重合,此时最大值变量里面存的就是最大可容纳水量

代码:

时间复杂度:

                O(N) N是数组长度

空间复杂度:

                O(1)

三、LeetCode 15.三数之和

先仔细看题目,明白题意,再做题

方法一:

  1. 如果我们按照暴力枚举的方式,需要O(N^3)次方时间复杂度,并且我们最后还有去重
  2. 我们寻找新的思路,简化一些,我们发现题目无非是要求找出数组中三数之和=0的,
    此时就能想到了有一道题叫两数之和,也是数组的
  3. 我们写第一层循环,来找第一个数,其余的两个数我们当作两数之和这道题来做,
    第一个数找到后,其余两数之和就是 0-第一个数
  4. 我们首先要对数组进行排序,排序是为了去重,也是为了更好的求两数
  5. 写第一层for循环,找到每个三元组的第一个数
    第二层循环 设置左右双指针,左指针指向第一个数右边的数也就是i+1,右指针指向尾巴
     判断左指针+右指针是否0-第一个数,如果等于,则找到了第一个三元组
    如果!=0,且大于0-第一个数,则代表值大了,右指针向左移动,因为已经排序过了,右边的值是最大值,所以它移动一位变小一点
    然后继续判断,如果值小了就左指针向右移动一位变大些
  6. 如此下去,就能找到所有的三元组,然后我们要处理去重的问题
    我们在上面的基础下加一些判断条件即可,找到一个三元组后,左右指针分别移动到跟当前值相比的非重复值上,去重

代码:

时间复杂度:

                O(N^2)

空间复杂度:

                O(logN) 


总结:⭐

这三道题都是跟双指针有关的

对于双指针的使用要熟悉


加油,为了更好的明天!

种一棵树最好的机会是十年前,其次是现在

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

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

相关文章

深度“求索”:DeepSeek+Dify构建个人知识库

目录 前言 环境部署 安装Docker 安装Dify 配置Dify 部署知识库 创建应用 前言 在当今数字化信息爆炸的时代,数据隐私和个性化知识管理成为企业和个人关注的焦点。Dify,作为一款备受瞩目的开源 AI 应用开发平台,为用户提供了完整的私有…

【Redis8】最新安装版与手动运行版

目录 一、直接运行 1. 下载 Redis百度网盘 2. 解压后直接运行 redis-server.exe​编辑 二、安装版运行 双击 install_redis_service.bat 输入安装路径(请提前创建好安装路径)后直接回车​编辑 下一步直接回车即可,因为是使用配置模板…

@Column 注解属性详解

提示:文章旨在说明 Column 注解属性如何在日常开发中使用,数据库类型为 MySql,其他类型数据库可能存在偏差,需要注意。 文章目录 一、name 方法二、unique 方法三、nullable 方法四、insertable 方法五、updatable 方法六、column…

使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第二部分)

建立向量嵌入数据库 from langchain_community.document_loaders import TextLoader from langchain_text_splitters import CharacterTextSplitter from langchain.docstore.document import Document from langchain_chroma.vectorstores import Chromaimport vertexai from…

【Go-4】函数

函数 函数是编程中的基本构建块,用于封装可重用的代码逻辑。Go语言中的函数功能强大,支持多种特性,如多返回值、可变参数、匿名函数、闭包以及将函数作为值和类型传递。理解和掌握函数的使用对于编写高效、可维护的Go程序至关重要。本章将详…

【已解决】HBuilder X编辑器在外接显示器或者4K显示器怎么界面变的好小问题

触发方式:主要涉及DPI缩放问题,可能在电脑息屏有概率触发 修复方式: 1.先关掉软件直接更改屏幕缩放,然后打开软件,再关掉软件恢复原来的缩放,再打开软件就好了 2.(不推荐)右键HBuilder在属性里…

spark调度系统核心组件SparkContext、DAGSchedul、TaskScheduler、Taskset介绍

目录 1. SparkContext2.DAGScheduler3. TaskScheduler4. 协作关系5 TaskSet的定义6. 组件关系说明Spark调度系统的核心组件主要有SparkContext、DAGScheduler和TaskScheduler SparkContext介绍 1. SparkContext 1、资源申请: SparkContext是Spark应用程序与集群管理器(如St…

VSCode+EIDE通过KeilC51编译,使VSCode+EIDE“支持”C和ASM混编

在使用Keil C51时,要让Keil C51支持混编则需要在混编的.c文件上右键选择Options for File *(ALTF7),打开选项界面后,在 Properties 页 勾上 Generate Assembler SRC File 和 Assemble SRC File ,如下图所示: 这样设置后…

SQLynx:一款跨平台的企业级数据库管理工具

SQLynx 是一款支持跨平台(Windows、Linux、macOS、Web)的企业级数据库管理和 SQL 工具,可以提供高效、安全且适配国产化技术栈的数据库管理解决方案。 数据源 SQLynx 支持连接各种关系型数据库、非关系型数据库以及大数据平台,包…

实战项目8(实训)

目录 项目01 【sw1】配置 【sw2】配置 任务结果截图 项目02 【sw1】配置 【sw2】配置 任务结果截图 项目03 【sw1】配置 任务结果截图 项目04 【sw1】配置 【r1】配置 任务结果截图 项目05 【r1】配置 【r2】配置 【r3】配置 任务结果截图 项目06 【r1】…

TCP为什么是三次握手,而不是二次?

为什么需要三次握手? 想象一下,你要给远方的朋友寄一份重要文件。你会怎么做? 普通人的做法: 直接扔进邮箱,祈祷别丢了 聪明人的做法: 先打电话确认地址,再发快递,最后确认收到 T…

dubbo使用nacos作为注册中心配置

<dubbo:registry protocol"nacos" address"${dubbo.registry.address.nacos}" /> <dubbo:metadata-report address"${dubbo.metadata-report.address}"/> 如果有多个地址&#xff0c;这块如何配置呢&#xff1f; nacos://ip:端口?…

教师角色的转变:从知识传授者到学习引导者

教师角色的转变&#xff1a;从知识传授者到学习引导者 随着人工智能&#xff08;AI&#xff09;和信息技术的迅速发展&#xff0c;教育正在经历深刻的变革。其中&#xff0c;教师角色的转变尤为关键。传统上&#xff0c;教师主要承担“知识传授者”的职责&#xff0c;即向学生…

PostgreSQL 用户权限与安全管理

1 系统默认角色 postgres# select rolname from pg_roles; rolname ----------------------------- postgres pg_database_owner pg_read_all_data pg_write_all_data pg_monitor pg_read_all_settings pg_read_all_stats pg_stat_scan_tables …

C++构造函数和析构函数

C++构造函数和析构函数 C++的构造函数和析构函数是类的特殊成员函数,用于对象的创建和销毁,分别在对象的生命周期开始和结束时自动调用。它们的使用对资源管理和对象的初始化/清理至关重要。 1. 构造函数 定义 构造函数在对象创建时自动调用,用于初始化对象的数据成员。构造…

根据Cortex-M3(STM32F1)权威指南讲解MCU内存架构与如何查看编译器生成的地址具体位置

首先我们先查看官方对于Cortex-M3预定义的存储器映射 1.存储器映射 1.1 Cortex-M3架构的存储器结构 内部私有外设总线&#xff1a;即AHB总线&#xff0c;包括NVIC中断&#xff0c;ITM硬件调试&#xff0c;FPB, DWT。 外部私有外设总线&#xff1a;即APB总线&#xff0c;用于…

软件设计师“测试用例”考点分析——求三连

一、测试用例设计核心要点解析 1. 白盒测试覆盖标准 &#xff08;1&#xff09;路径覆盖&#xff1a;需覆盖程序中所有可能的路径。如2018年真题路径覆盖需要3组测试用例&#xff08;①②、①③、①③④&#xff09;&#xff0c;2020年流程图则需4个用例覆盖ace/abd/abe/acd四…

Linux 用户无法远程连接服务器

前言 昨天深夜一点多接到客户电话&#xff0c;客户说OS用户下午下班前还能正常登录。因为晚上一点半需要关闭所有服务进行迁移&#xff0c;但是用户无法登录了&#xff0c;导致后续流程无法执行。我让他先通过root用户紧急修改了密码&#xff0c;先保证业务正常流转。 问题 …

多模态大语言模型arxiv论文略读(八十八)

MammothModa: Multi-Modal Large Language Model ➡️ 论文标题&#xff1a;MammothModa: Multi-Modal Large Language Model ➡️ 论文作者&#xff1a;Qi She, Junwen Pan, Xin Wan, Rui Zhang, Dawei Lu, Kai Huang ➡️ 研究机构: ByteDance, Beijing, China ➡️ 问题背景…

svn迁移到git保留记录和Python字符串格式化 f-string的进化历程

svn迁移到git保留记录 and Python字符串格式化(二&#xff09;&#xff1a; f-string的进化历程 在将项目从SVN迁移到Git时&#xff0c;保留完整的版本历史记录非常重要。下面是详细的步骤和工具&#xff0c;可以帮助你完成这一过程&#xff1a; 安装Git和SVN工具 首先&#…