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

LeetCode 解题思路 3(Hot 100)

在这里插入图片描述

解题思路:

  1. 初始化指针: 左指针指向数组起始位置,右指针指向数组末尾。
  2. 计算当前面积: 左右指针相遇前所围成的矩形面积。
  3. ​更新最大面积: 比较当前面积与已知最大面积。
  4. 移动指针: 移动较高指针无法获得更大面积,故移动较低指针。

Java代码:

class Solution {public int maxArea(int[] height) {int l = 0, r = height.length - 1;int ans = 0;while (l < r) {int area = Math.min(height[l], height[r]) * (r - l);ans = Math.max(ans, area);if (height[l] <= height[r]) {l++;} else {r--;}}return ans;}
}

复杂度分析:

  • 时间复杂度: 严格O(n),最多移动 n 次指针。
  • 空间复杂度: 所有额外使用的空间与输入规模无关,空间复杂度为O (1)。

在这里插入图片描述

解题思路:

  1. ​排序: 首先对数组进行排序,便于后续处理重复元素和双指针操作。
  2. ​遍历数组: 使用外层循环遍历数组,固定第一个元素 nums[i]。
  3. 双指针法: 对于每个固定的 nums[i],使用双指针 j(左指针)和 k(右指针)在剩余数组中寻找两个数,使得三数之和为0。
  4. 跳过重复元素:
    • 外层循环中,若当前元素与前一个元素相同,则跳过,避免重复的三元组。
    • 内层循环中,找到有效三元组后,跳过所有与当前指针值相同的元素,防止重复。

Java代码:

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result = new ArrayList<>();if (nums == null || nums.length < 3) return result;Arrays.sort(nums);for (int i = 0; i < nums.length - 2; i++) {if (i > 0 && nums[i] == nums[i - 1]) continue;int j = i + 1;int k = nums.length - 1;while (j < k) {int sum = nums[i] + nums[j] + nums[k];if (sum < 0) {j++;} else if (sum > 0) {k--;} else {result.add(Arrays.asList(nums[i], nums[j], nums[k]));while (j < k && nums[j] == nums[j + 1]) j++;while (j < k && nums[k] == nums[k - 1]) k--;j++;k--;}}}return result;}
}

复杂度分析:

  • 时间复杂度: 排序时间复杂度为 O(nlogn),遍历与双指针:外层循环遍历 O(n) 次,内层双指针遍历 O(n) 次,总时间复杂度为 O( n 2 n^2 n2)。
  • 空间复杂度: 主要用于存储结果列表,最坏情况下空间复杂度为 O( n 2 n^2 n2),平均情况下为 O(1) 至 O(n)。

相关文章:

LeetCode 解题思路 3(Hot 100)

解题思路&#xff1a; 初始化指针&#xff1a; 左指针指向数组起始位置&#xff0c;右指针指向数组末尾。计算当前面积&#xff1a; 左右指针相遇前所围成的矩形面积。​更新最大面积&#xff1a; 比较当前面积与已知最大面积。​移动指针&#xff1a; 移动较高指针无法获得更…...

算法-二叉树篇11-左叶子之和

左叶子之和 力扣题目链接 题目描述 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 解题思路 层次遍历的时候&#xff0c;保留每层第一个节点并相加即可。 题解 class Solution { public:int sumOfLeftLeaves(TreeNode* root) {if(root NULL){return 0;}re…...

MaxKB上架至阿里云轻量应用服务器镜像市场

近日&#xff0c;MaxKB开源知识库问答系统已上架至阿里云轻量应用服务器镜像市场&#xff0c;目前是阿里云此类镜像市场中唯一推荐的AI应用镜像。 ▲图1 MaxKB已经上架至阿里云轻量应用服务器镜像市场 MaxKB是飞致云旗下开源项目&#xff0c;是一款基于大语言模型和RAG&…...

用户态和内核态是什么?

用户态&#xff08;User Mode&#xff09;和内核态&#xff08;Kernel Mode&#xff09;。这两个概念是理解操作系统工作原理的基础。 1. 什么是用户态和内核态&#xff1f; 1.1 用户态&#xff08;User Mode&#xff09; 用户态是操作系统为普通应用程序提供的运行模式。在这…...

2025年SCI一区智能优化算法:混沌进化优化算法(Chaotic Evolution Optimization, CEO),提供MATLAB代码

一、混沌进化优化算法 https://github.com/ITyuanshou/MATLABCode 1. 算法简介 混沌进化优化算法&#xff08;Chaotic Evolution Optimization, CEO&#xff09;是2025年提出的一种受混沌动力学启发的新型元启发式算法。该算法的主要灵感来源于二维离散忆阻映射的混沌进化过…...

普中单片机-51TFT-LCD显示屏(1.8寸 STM32)

普中官方论坛&#xff1a; http://www.prechin.cn/gongsixinwen/208.html 普中科技-各型号开发板资料链接&#xff1a;https://www.bilibili.com/read/cv23681775/?spm_id_from333.999.0.0 27-TFTLCD显示实验_哔哩哔哩_bilibili 2.程序烧录 2.1设置彩屏驱动 3.实验效果...

SGMII(Serial Gigabit Media Independent Interface)详解

一、SGMII的定义与作用 SGMII&#xff08;串行千兆介质无关接口&#xff09;是一种用于千兆以太网&#xff08;1Gbps&#xff09;的串行接口标准&#xff0c;旨在通过减少引脚数量和简化设计&#xff0c;实现MAC层与PHY芯片之间的高速通信。其核心作用包括&#xff1a; 引脚精…...

DeepSeek:我的AI助手之旅

★【前言】: 初次使用AI助手帮我写作,就像摸石头过河一样,一点点的前行。我在慢慢的摸索,慢慢的体会中,感悟出的一点个人心得体会现分享给大家。这也说明一个问题,网站上各种使用方法和技巧是对于已经使用过的人来说的方便和快捷,但对于刚刚接触的使用者来说,网上的各…...

图片批量去重---(均值哈希、插值哈希、感知哈希、三/单通道直方图)

一、整体步骤 本脚本中&#xff0c;关键步骤包括以下步骤&#xff1a; 1、图片加载&#xff1a; 脚本会遍历指定的图片目录&#xff0c;将所有图片加载到内存中。 2、图像预处理&#xff1a; 比较之前&#xff0c;通常需要对图片进行预处理&#xff0c;如调整大小、灰度化或直方…...

Linux:(3)

一&#xff1a;Linux和Linux互传&#xff08;压缩包&#xff09; scp:Linux scp 命令用于 Linux 之间复制文件和目录。 scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。 scp 是加密的&#xff0c;rcp 是不加密的&#xff0c;scp 是…...

vscode设置自动换行

vscode设置自动换行 方法 方法 点击文件->首选项->设置。搜索word wrap -> 选择 on 。 搜索Word Wrap&#xff0c;并把选项改为on。...

Instagram 隐私设置全面解析:如何保护你的个人数据?

Instagram 隐私设置全面解析&#xff1a;如何保护你的个人数据&#xff1f; 在这个数字化时代&#xff0c;社交媒体平台如 Instagram 已成为我们日常生活的一部分。然而&#xff0c;随着个人信息泄露和隐私侵犯事件的频发&#xff0c;保护个人数据变得尤为重要。本文将全面解析…...

Activiti 5 + Spring Boot全流程开发指南

目录 一、环境搭建&#xff08;Spring Boot 2.x&#xff09; 1.1 依赖配置 1.2 配置文件 二、流程定义与部署 2.1 创建BPMN文件&#xff08;leave.bpmn&#xff09; 2.2 流程部署服务 三、流程操作核心实现 3.1 启动流程实例 3.2 查询待办任务 四、审批流程处理 4.1 …...

spring结合mybatis多租户实现单库分表

实现单库分表 思路&#xff1a;student表数据量大&#xff0c;所以将其进行分表处理。一共有三个分表&#xff0c;分别是student0&#xff0c;student1&#xff0c;student2&#xff0c;在新增数据的时候&#xff0c;根据请求头中的meta-tenant参数决定数据存在哪张表表。 数…...

面向对象编程(OOP)基础:Java入门指南

引言 随着计算机技术的发展&#xff0c;软件的应用越来越复杂&#xff0c;单个程序的功能也逐渐增多。为了提高代码的复用性和可维护性&#xff0c;Java语言引入了**面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;**这一设计理念。 OOP是一种设计程序…...

day7作业

编写一个如下场景&#xff1a; 有一个英雄Hero类&#xff0c;私有成员&#xff0c;攻击&#xff08;Atx&#xff09;&#xff0c;防御&#xff08;Defense&#xff09;&#xff0c;速度&#xff08;Speed)&#xff0c;生命值&#xff08;Blood)&#xff0c;以及所有的set get 方…...

图像处理之图像边缘检测算法

目录 1 图像边缘检测算法简介 2 Sobel边缘检测 3 经典的Canny边缘检测算法 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 参考 1 图像边缘检测算法简介 图像边缘检测是计算机视觉和图像处理中的基本问题&#xff0c;主要目的是提取图像中明暗变化明显的边缘细节…...

第二十五 :搭建 pinia 环境

第一步&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts import { createApp } from vue import App from ./App.vue ​ /* 引入createPinia&#xff0c;用于创建pinia */ import { createPinia } from pinia ​ /* 创建pinia */ const pinia createPinia(…...

学习Java数组操作:从基础到高级技巧详解

在Java编程中&#xff0c;数组是一种非常基础且常用的非 primitives 数据结构&#xff0c;它用于存储一组相同类型的值。无论是数据处理、遍历还是其他操作&#xff0c;数组都是一个不可或缺的工具。本文将从数组的基本概念开始&#xff0c;逐步介绍常用的操作方法&#xff0c;…...

算法题(79):两个数组的交集

审题&#xff1a; 本题需要我们查找两个给定数组的无重复数据交集&#xff0c;并以数组的形式返回 思路&#xff1a; 方法一&#xff1a;set 之前我们学习过unordered_set的使用&#xff0c;但是unordered_set是无序的&#xff0c;而这里我们的比对算法需要有序数据&#xff0c…...

Dhall性能优化与部署指南:构建高效配置管理系统的终极方案

Dhall性能优化与部署指南&#xff1a;构建高效配置管理系统的终极方案 【免费下载链接】dhall-lang Maintainable configuration files 项目地址: https://gitcode.com/gh_mirrors/dh/dhall-lang Dhall是一个强大的配置语言&#xff0c;旨在提供可维护的配置文件解决方案…...

新手入门编程选C语言!超详细零基础入门指南请查收

新手入门编程&#xff0c;选对语言太关键&#xff01;许多人有着想要学习编程的想法&#xff0c;然而却不清楚该从哪里开始着手——实际上C语言才是对于没有基础之人最为适宜的“敲门砖”。它身为编程领域的“老大哥”&#xff0c;不但语法秉持简洁的特点、易于让人掌握&#x…...

Spring IOC 源码学习 声明式事务的入口点氖

springboot自动配置 自动配置了大量组件&#xff0c;配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后&#xff0c;springboot会根据类路径上的jar包来自动配置bean&#xff08;比如&#xff1a;springboot发现类路径上的MyBatis相关类&#xff…...

记录复现多模态大模型论文OPERA的一周工作()杖

pagehelper整合 引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数…...

从“单细胞”到“多细胞”:MetaGPT、AutoGen、AgentVerse如何重塑AI应用开发范式?

从“单细胞”到“多细胞”&#xff1a;MetaGPT、AutoGen、AgentVerse如何重塑AI应用开发范式&#xff1f; 想象一下&#xff0c;当你对AI说"开发一个电商网站"时&#xff0c;不再只是得到零散的代码片段&#xff0c;而是一个完整的数字团队自动分工协作&#xff1a;产…...

实战分享:我把Qwen2.5-7B-Instruct变成专属文本分类器,LlamaFactory LoRA微调+推理加速全记录

从零构建Qwen2.5-7B文本分类引擎&#xff1a;LlamaFactory LoRA微调与vLLM推理加速实战 去年接手一个政务文本分类项目时&#xff0c;传统BERT模型在长文本场景下的表现让我屡次陷入调参困境。直到尝试用Qwen2.5-7B-Instruct配合LlamaFactory进行LoRA微调&#xff0c;才发现大语…...

OpenClaw Memory 记忆系统完全指南:文件结构、Heartbeat机制与调教实践

关键词&#xff1a;OpenClaw Memory、AI Agent记忆、本地记忆存储、Heartbeat心跳、USER.md调教一、问题背景&#xff1a;为什么 AI Agent 需要独立的记忆系统 大模型的上下文窗口有限——即使是 200K tokens 的 Claude&#xff0c;关闭窗口后也完全忘记之前的对话。要让 AI Ag…...

python 文件管理库 Path 解析(详细基础)狼

. GIF文件结构 相比于 WAV 文件的简单粗暴&#xff0c;GIF 的结构要精密得多&#xff0c;因为它天生是为了网络传输而设计的&#xff08;包含了压缩机制&#xff09;。 当我们用二进制视角观察 GIF 时&#xff0c;它是由一个个 数据块&#xff08;Block&#xff09; 组成的&…...

三大编程语言深度对比:C# vs 易语言 vs 汇编

C#、易语言和汇编语言是三种定位和应用场景完全不同的编程语言&#xff0c;以下是它们的核心区别对比&#xff1a;特性C#易语言汇编语言语言类型高级面向对象语言中文可视化编程语言低级机器导向语言开发范式支持OOP、函数式等事件驱动中文语法直接操作寄存器/内存执行方式编译…...

如何优化SQL注入检测性能_通过预编译缓存提升效率

预编译语句能减少SQL注入检测开销&#xff0c;因其将参数与SQL模板分离&#xff0c;使检测只需针对缓存的带占位符模板执行一次&#xff0c;而非每次请求都扫描完整SQL字符串。为什么预编译语句能减少SQL注入检测开销因为真正的注入检测&#xff08;如正则匹配、语法树分析&…...