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

LC-两数之和、字母异位词分组、最长连续序列、移动零、盛最多水的容器

两数之和

class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;  // 获取数组 nums 的长度// 外层循环:遍历数组中的每一个元素 nums[i]for(int i = 0; i < n; i++) {// 内层循环:从 nums[i] 的下一个元素 nums[j] 开始遍历// 这样避免了重复检查已经比较过的元素for(int j = i + 1; j < n; j++) {// 如果 nums[i] + nums[j] 的和等于目标值 targetif(nums[i] + nums[j] == target) {// 找到符合条件的两个数,返回它们的下标return new int[]{i, j};}}}// 如果没有找到符合条件的两个数,返回一个空数组return new int[0];}
}

字母异位词分组

  • 字母排序法

    • 字母异位词在排序后会得到相同的字符串。例如,“eat”和“tea”排序后都变成“aet”。
    • 基于这个特性,可以将字符串按照字母排序后的结果作为“键”存入一个哈希表(Map)。所有字母异位词会具有相同的“键”,因此它们可以归为一组。
  • 哈希表(Map)存储

    • 遍历输入的字符串数组,对于每一个字符串,排序得到一个新的字符串,作为哈希表的键。
    • 将该字符串加入对应的键值列表中(即字母异位词的分组)。
  • 返回结果

    • 最后,返回哈希表中所有的值(即分组后的字母异位词列表)。
// 字母异位词是由相同的字母组成,只是字母的顺序不同。
class Solution {public List<List<String>> groupAnagrams(String[] strs) {// 创建一个哈希表来存储异位词的分组Map<String, List<String>> map = new HashMap<>();// 遍历字符串数组for (String str : strs) {// 将每个字符串转为字符数组并排序char[] array = str.toCharArray();Arrays.sort(array);// 将排序后的字符数组转换成字符串作为哈希表的键String key = new String(array);// 获取该键对应的列表,如果没有则新建一个  // getOrDefault 是 Java 中 Map 接口的一个方法,用于从映射中获取指定键对应的值。如果键存在,则返回对应的值;如果键不存在,则返回一个默认值。List<String> list = map.getOrDefault(key, new ArrayList<>());// 将当前字符串添加到对应的列表中list.add(str);// 将更新后的列表重新放回哈希表map.put(key, list);}// 返回所有字母异位词的分组return new ArrayList<>(map.values());}
}

最长连续序列

具体步骤如下:

  1. 将所有元素加入一个哈希集合 set,通过哈希集合可以在常数时间内查找某个元素是否存在。
  2. 遍历数组中的每个元素,对于每个元素 x,判断 x-1 是否在哈希集合中。如果 x-1 存在,说明 x 不是连续序列的起始元素,可以跳过这个元素。
  3. 如果 x-1 不存在,即 x 是一个连续序列的起始元素,则开始从 x 开始向后查找连续的数字,直到找不到连续的数字为止。
  4. 在每次查找过程中,记录当前连续序列的长度,并更新最长的连续序列长度。
class Solution {public int longestConsecutive(int[] nums) {// 创建一个 HashSet 来存储数组中的元素HashSet<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}int longestStreak = 0;// 遍历数组中的每个元素for (int num : nums) {// 如果 num-1 不在 set 中,说明 num 是一个连续序列的起始元素if (!set.contains(num - 1)) {int currentNum = num;int currentStreak = 1;// 从当前元素开始,检查连续的元素while (set.contains(currentNum + 1)) {currentNum += 1;currentStreak += 1;set.remove(currentNum);  // 将已经访问的数字移除,避免重复计算}// 更新最长连续序列的长度longestStreak = Math.max(longestStreak, currentStreak);}}return longestStreak;}
}

移动零

思路:

  1. 双指针法

    • 使用两个指针 leftright
    • right 用来遍历整个数组,逐个检查每个元素。
    • left 用来指示下一个应该放置非零元素的位置。
  2. 遍历数组

    • 如果 right 指向的元素是非零元素,我们就将其与 left 指向的元素交换,确保非零元素向数组的前面靠近。
    • 每次交换后,left 增加,指向下一个可以放置非零元素的位置。
    • right 不停地向后移动,直到遍历完整个数组。
  3. 交换的目的

    • 交换后,left 指向的地方总是非零元素,而 right 指向的元素经过交换后会被移动到适当的位置(如果是零,就会被移到后面)。
  4. 保持顺序

    • 非零元素的相对顺序会被保持,因为我们只做交换而没有改变原有元素的位置。
class Solution {public void moveZeroes(int[] nums) {int n = nums.length;int left = 0, right = 0;while (right < n) {  // 遍历数组if (nums[right] != 0) {  // 如果遇到非零元素swap(nums, left, right);  // 交换元素left++;  // 移动left指针,指向下一个可放置非零元素的位置}right++;  // 移动right指针,继续遍历}}public void swap(int[] nums, int left, int right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;  // 交换left和right指向的元素}
}

盛最多水的容器

双指针策略

  • 初始化两个指针,lr,分别指向数组的左右两端。
  • 计算当前 lr 指向的两条线形成的容器的面积:
    • 容器的面积 = min(height[l], height[r]) * (r - l)
    • height[l]height[r] 代表了容器的高度,r - l 是容器的宽度。
  • 然后更新最大面积 ans
  • 为了尝试增大水量,我们应该尽量移除较短的线,因为移除短的线有可能让我们找到更高的线,从而可能增大容器的水量。
  • 移动指针:
    • 如果 height[l] 小于 height[r],说明 l 对应的线较短,应该尝试向右移动 l
    • 如果 height[l] 大于或等于 height[r],说明 r 对应的线较短,应该尝试向左移动 r

重复以上步骤,直到左右指针相遇。

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;  // 返回最大水量}
}

相关文章:

LC-两数之和、字母异位词分组、最长连续序列、移动零、盛最多水的容器

两数之和 class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length; // 获取数组 nums 的长度// 外层循环&#xff1a;遍历数组中的每一个元素 nums[i]for(int i 0; i < n; i) {// 内层循环&#xff1a;从 nums[i] 的下一个元素 nums[j] 开始遍…...

Netty源码解析之线程池的实现(二):创建线程与执行任务

前言 先看下面的代码&#xff1a; public class MyTest {public static void main(String[] args) {//创建NioEventLoopGroupNioEventLoopGroup loopGroup new NioEventLoopGroup(3);System.out.println(Thread.currentThread()"准备执行任务");//执行任务for (in…...

IDEA - 一个启动类多次启动方法

More Run/Debug -> Modify Run Configuration -> modify options -> Allow mutiple instances...

U3D支持webgpu阅读

https://docs.unity3d.com/6000.1/Documentation/Manual/WebGPU-features.html 这里看到已经该有的差不多都有了 WOW VFX更是好东西 https://unity.com/cn/features/visual-effect-graph 这玩意儿化简了纯手搓一个特效的流程 如果按原理说就是compute shader刷position&#…...

C++广度优先搜索

简介 老规矩&#xff0c;先来介绍一下什么是广度优先搜索&#xff08;至于这么长时间没更新是为什么&#xff0c;我放在文章结尾了&#xff0c;感兴趣可以看看&#xff0c;以后也是如此&#xff09; 广度优先搜索&#xff0c;从名字就能听出来&#xff0c;他和深度优先搜索关…...

SVN 提交与原有文件类型不一样的文件时的操作

SVN 提交与原有文件类型不一样的文件时的操作 背景 SVN 服务器上原本的文件是软链接类型的&#xff0c;但是我将它改成普通文件再上传。出现了以下提示&#xff1a; 解决过程 本来想着通过 svn rm 和 svn add 来解决&#xff0c;但是行不通。 最终解决方案 svn rm --keep-…...

活动预告 | Power Hour: Copilot 引领商业应用的未来

课程介绍 智能化时代&#xff0c;商业应用如何实现突破&#xff1f;微软全球副总裁 Charles Lamanna 将为您深度解析&#xff0c;剖析其中关键因素。 在本次线上研讨会中&#xff0c;Charles Lamanna 将分享他在增强商业运营方面的独到见解与实战策略&#xff0c;深度解读商业…...

WPF 进度条(ProgressBar)示例一

本文讲述&#xff1a;WPF 进度条(ProgressBar)简单的样式修改和使用。 进度显示界面&#xff1a;使用UserControl把ProgressBar和进度值以及要显示的内容全部组装在UserControl界面中&#xff0c;方便其他界面直接进行使用。 <UserControl x:Class"DefProcessBarDemo…...

【C#】任务调度的实现原理与组件应用Quartz.Net

Quartz 是一个流行的开源作业调度库&#xff0c;最初由 Terracotta 开发&#xff0c;现在由 Terracotta 的一部分 Oracle 所有。它主要用于在 Java 应用程序中调度作业的执行。Quartz 使用了一种复杂的底层算法来管理任务调度&#xff0c;其中包括任务触发、执行、持久化以及集…...

UV - Python 包管理

文章目录 创建 uv 项目已有项目已有uv项目 创建 uv 项目 # 创建项目 uv init m3 # 创建环境 cd m3 uv venv --python 3.11 # 激活环境 source .venv/bin/activate # 添加库 uv add flask 如果创建项目后&#xff0c;给库取别的名字&#xff0c;add 的时候&#xff0c;会…...

pytorch torch.linalg模块介绍

torch.linalg 是 PyTorch 的 线性代数 (Linear Algebra) 子模块&#xff0c;它提供了许多 高效的矩阵操作和分解方法&#xff0c;类似于 NumPy 的 numpy.linalg 或 SciPy 的 scipy.linalg&#xff0c;但针对 GPU 加速和自动微分 进行了优化。 1. 矩阵基本运算 矩阵乘法 torc…...

光伏-报告显示,假期内,硅料端签单顺序发货相对稳定。若3月份下游存提产,则不排除硅料价格有上调预期。

据TrendForce集邦咨询报告显示&#xff0c;假期内&#xff0c;硅料端按照前期签单顺序发货&#xff0c;相对稳定。若3月份下游存提产&#xff0c;则不排除硅料价格有上调预期。 002306中科云网 旅游 | 公司为提供复合菜系特色餐饮的连锁企业&#xff0c;形成了以粤菜&#xff…...

【web自动化】指定chromedriver以及chrome路径

selenium自动化&#xff0c;指定chromedriver&#xff0c;以及chrome路径 对应这篇文章&#xff0c;可以点击查看&#xff0c;详情 from selenium import webdriverdef get_driver():# 获取配置对象option webdriver.ChromeOptions()option.add_experimental_option("de…...

顺丰数据分析(数据挖掘)面试题及参考答案

你觉得数据分析人员必备的技能有哪些? 数据分析人员需具备多方面技能,以应对复杂的数据处理与解读工作。 数据处理能力:这是基础且关键的技能。数据常以杂乱、不完整的形式存在,需通过清洗,去除重复、错误及缺失值数据,确保数据质量。例如,在电商销售数据中,可能存在价…...

Android studio:顶部导航栏Toolbar

主流APP在顶部都配有导航栏&#xff0c;在 Android 中&#xff0c;ActionBar 是默认启用的&#xff0c;它是位于屏幕顶部的一个工具栏&#xff0c;用来放置应用的标题、导航和操作菜单。 如果你想使用自定义的 Toolbar 来替代 ActionBar&#xff0c;应该先关闭它。可以通过设置…...

mmap 文件映射

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; mmap介绍&#x1f98b; 基本说明&#x1f98b; 参数介绍&#x1f98b; 返回值 二&#xff1a;&#x1f525; demo代码&#x1f98b; 写入映射&#x1f98b…...

基于微信小程序的医院预约挂号系统的设计与实现

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…...

【Linux】Socket编程—UDP

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…...

2025年物联网相关专业毕业论文选题参考,文末联系,选题相关资料提供

一、智能穿戴解决方案研究方向 序号解决方案论文选题论文研究方向1智能腰带健康监测基于SpringBoot和Vue的智能腰带健康监测数据可视化平台开发研究如何利用SpringBoot和Vue技术栈开发一个数据可视化平台&#xff0c;用于展示智能腰带健康监测采集的数据&#xff0c;如心率、血…...

如何在WPS和Word/Excel中直接使用DeepSeek功能

以下是将DeepSeek功能集成到WPS中的详细步骤&#xff0c;无需本地部署模型&#xff0c;直接通过官网连接使用&#xff1a;1. 下载并安装OfficeAI插件 &#xff08;1&#xff09;访问OfficeAI插件下载地址&#xff1a;OfficeAI助手 - 免费办公智能AI助手, AI写作&#xff0c;下载…...

Stitches项目架构分析:RequireJS模块化设计与Grunt构建流程完全指南 [特殊字符]

Stitches项目架构分析&#xff1a;RequireJS模块化设计与Grunt构建流程完全指南 &#x1f680; 【免费下载链接】stitches HTML5 Sprite Sheet Generator 项目地址: https://gitcode.com/gh_mirrors/sti/stitches Stitches是一个基于HTML5的雪碧图生成器&#xff0c;它采…...

深圳实体门店有必要做GEO AI代运营吗

深圳实体门店有必要做GEO AI代运营吗一、开篇引言2026年深圳本地实体商业竞争进入白热化阶段&#xff0c;全城数百万家线下实体门店涵盖本地生活、家装工装、汽车服务、餐饮娱乐、教育培训等全品类&#xff0c;传统线下地推、门店自然客流、传统团购平台引流效果持续下滑&#…...

信息系统项目管理师核心知识点精讲

一、项目整合管理(重点:项目章程与项目管理计划) 知识点详解: 项目整体管理是项目管理知识体系的核心,它确保项目各要素协调统一。在考试中,特别要掌握项目章程和项目管理计划的区别与联系。 项目章程是项目的“出生证明”,由项目发起人发布。它正式授权项目,赋予项…...

适合地产人用的中介房源管理系统

在房产经纪行业&#xff0c;房源管理与客源管理是经纪人日常工作的核心&#xff0c;直接影响业务效率与成交转化。选择一套适配行业需求的中介房源管理系统&#xff0c;能帮助中介团队规范流程、降低运营成本、大幅提升业绩。今天我们以客观视角&#xff0c;详细解析全房源系统…...

警惕!AI正在悄悄重构全球攻防格局

警惕&#xff01;AI 正在悄悄重构全球攻防格局 热点聚焦 AI重构网络安全&#xff1a;全球巨头加速布局 2026年5月&#xff0c;全球网络安全领域迎来重大变革&#xff0c;AI技术正在重塑攻防格局。OpenAI发布专为网络安全防御打造的集成化AI平台Daybreak&#xff0c;将安全防…...

ESP32多任务水位监测:从Arduino到ESP-IDF的FreeRTOS实战

1. 项目概述&#xff1a;从Arduino到ESP-IDF的跃迁去年我在做毕业设计时&#xff0c;为了搭建一个ESP32的传感器节点演示程序&#xff0c;第一次深入使用了FreeRTOS。那段时间&#xff0c;我几乎天天和任务调度、队列、信号量打交道&#xff0c;从最初的一头雾水到后来能流畅地…...

碧蓝航线自动化脚本终极指南:3小时学会全自动游戏管理

碧蓝航线自动化脚本终极指南&#xff1a;3小时学会全自动游戏管理 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧蓝…...

账务台账数据

银行里说的 “账务台账数据”&#xff0c;本质就是按会计规则把每笔业务逐笔、分户、分科目记下来的完整明细流水 余额 辅助信息&#xff0c;核心是 “可逐笔追溯、可对账、可审计” 的一套明细数据。下面用通俗、具体的方式拆开说&#xff1a;一、银行 “账务台账” 到底是什…...

基于PIC32的嵌入式MIDI合成器:从波表合成到硬件实现

1. 项目概述&#xff1a;一个基于嵌入式微控制器的MIDI声音合成器如果你对电子音乐制作、嵌入式开发&#xff0c;或者DIY硬件合成器感兴趣&#xff0c;那么“REMI Synth”这个项目绝对值得你花时间深入了解。它本质上是一个数字单音MIDI控制的声音合成器&#xff0c;核心是一块…...

ComfyUI-Manager完整指南:如何轻松管理你的AI工作流扩展库

ComfyUI-Manager完整指南&#xff1a;如何轻松管理你的AI工作流扩展库 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various c…...