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());}
}
最长连续序列

具体步骤如下:
- 将所有元素加入一个哈希集合
set,通过哈希集合可以在常数时间内查找某个元素是否存在。 - 遍历数组中的每个元素,对于每个元素
x,判断x-1是否在哈希集合中。如果x-1存在,说明x不是连续序列的起始元素,可以跳过这个元素。 - 如果
x-1不存在,即x是一个连续序列的起始元素,则开始从x开始向后查找连续的数字,直到找不到连续的数字为止。 - 在每次查找过程中,记录当前连续序列的长度,并更新最长的连续序列长度。
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;}
}
移动零

思路:
-
双指针法:
- 使用两个指针
left和right。 right用来遍历整个数组,逐个检查每个元素。left用来指示下一个应该放置非零元素的位置。
- 使用两个指针
-
遍历数组:
- 如果
right指向的元素是非零元素,我们就将其与left指向的元素交换,确保非零元素向数组的前面靠近。 - 每次交换后,
left增加,指向下一个可以放置非零元素的位置。 right不停地向后移动,直到遍历完整个数组。
- 如果
-
交换的目的:
- 交换后,
left指向的地方总是非零元素,而right指向的元素经过交换后会被移动到适当的位置(如果是零,就会被移到后面)。
- 交换后,
-
保持顺序:
- 非零元素的相对顺序会被保持,因为我们只做交换而没有改变原有元素的位置。
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指向的元素}
}
盛最多水的容器

双指针策略:
- 初始化两个指针,
l和r,分别指向数组的左右两端。 - 计算当前
l和r指向的两条线形成的容器的面积:- 容器的面积 =
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 的长度// 外层循环:遍历数组中的每一个元素 nums[i]for(int i 0; i < n; i) {// 内层循环:从 nums[i] 的下一个元素 nums[j] 开始遍…...
Netty源码解析之线程池的实现(二):创建线程与执行任务
前言 先看下面的代码: 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++广度优先搜索
简介 老规矩,先来介绍一下什么是广度优先搜索(至于这么长时间没更新是为什么,我放在文章结尾了,感兴趣可以看看,以后也是如此) 广度优先搜索,从名字就能听出来,他和深度优先搜索关…...
SVN 提交与原有文件类型不一样的文件时的操作
SVN 提交与原有文件类型不一样的文件时的操作 背景 SVN 服务器上原本的文件是软链接类型的,但是我将它改成普通文件再上传。出现了以下提示: 解决过程 本来想着通过 svn rm 和 svn add 来解决,但是行不通。 最终解决方案 svn rm --keep-…...
活动预告 | Power Hour: Copilot 引领商业应用的未来
课程介绍 智能化时代,商业应用如何实现突破?微软全球副总裁 Charles Lamanna 将为您深度解析,剖析其中关键因素。 在本次线上研讨会中,Charles Lamanna 将分享他在增强商业运营方面的独到见解与实战策略,深度解读商业…...
WPF 进度条(ProgressBar)示例一
本文讲述:WPF 进度条(ProgressBar)简单的样式修改和使用。 进度显示界面:使用UserControl把ProgressBar和进度值以及要显示的内容全部组装在UserControl界面中,方便其他界面直接进行使用。 <UserControl x:Class"DefProcessBarDemo…...
【C#】任务调度的实现原理与组件应用Quartz.Net
Quartz 是一个流行的开源作业调度库,最初由 Terracotta 开发,现在由 Terracotta 的一部分 Oracle 所有。它主要用于在 Java 应用程序中调度作业的执行。Quartz 使用了一种复杂的底层算法来管理任务调度,其中包括任务触发、执行、持久化以及集…...
UV - Python 包管理
文章目录 创建 uv 项目已有项目已有uv项目 创建 uv 项目 # 创建项目 uv init m3 # 创建环境 cd m3 uv venv --python 3.11 # 激活环境 source .venv/bin/activate # 添加库 uv add flask 如果创建项目后,给库取别的名字,add 的时候,会…...
pytorch torch.linalg模块介绍
torch.linalg 是 PyTorch 的 线性代数 (Linear Algebra) 子模块,它提供了许多 高效的矩阵操作和分解方法,类似于 NumPy 的 numpy.linalg 或 SciPy 的 scipy.linalg,但针对 GPU 加速和自动微分 进行了优化。 1. 矩阵基本运算 矩阵乘法 torc…...
光伏-报告显示,假期内,硅料端签单顺序发货相对稳定。若3月份下游存提产,则不排除硅料价格有上调预期。
据TrendForce集邦咨询报告显示,假期内,硅料端按照前期签单顺序发货,相对稳定。若3月份下游存提产,则不排除硅料价格有上调预期。 002306中科云网 旅游 | 公司为提供复合菜系特色餐饮的连锁企业,形成了以粤菜ÿ…...
【web自动化】指定chromedriver以及chrome路径
selenium自动化,指定chromedriver,以及chrome路径 对应这篇文章,可以点击查看,详情 from selenium import webdriverdef get_driver():# 获取配置对象option webdriver.ChromeOptions()option.add_experimental_option("de…...
顺丰数据分析(数据挖掘)面试题及参考答案
你觉得数据分析人员必备的技能有哪些? 数据分析人员需具备多方面技能,以应对复杂的数据处理与解读工作。 数据处理能力:这是基础且关键的技能。数据常以杂乱、不完整的形式存在,需通过清洗,去除重复、错误及缺失值数据,确保数据质量。例如,在电商销售数据中,可能存在价…...
Android studio:顶部导航栏Toolbar
主流APP在顶部都配有导航栏,在 Android 中,ActionBar 是默认启用的,它是位于屏幕顶部的一个工具栏,用来放置应用的标题、导航和操作菜单。 如果你想使用自定义的 Toolbar 来替代 ActionBar,应该先关闭它。可以通过设置…...
mmap 文件映射
🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 mmap介绍🦋 基本说明🦋 参数介绍🦋 返回值 二:🔥 demo代码🦋 写入映射🦋…...
基于微信小程序的医院预约挂号系统的设计与实现
hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…...
【Linux】Socket编程—UDP
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…...
2025年物联网相关专业毕业论文选题参考,文末联系,选题相关资料提供
一、智能穿戴解决方案研究方向 序号解决方案论文选题论文研究方向1智能腰带健康监测基于SpringBoot和Vue的智能腰带健康监测数据可视化平台开发研究如何利用SpringBoot和Vue技术栈开发一个数据可视化平台,用于展示智能腰带健康监测采集的数据,如心率、血…...
如何在WPS和Word/Excel中直接使用DeepSeek功能
以下是将DeepSeek功能集成到WPS中的详细步骤,无需本地部署模型,直接通过官网连接使用:1. 下载并安装OfficeAI插件 (1)访问OfficeAI插件下载地址:OfficeAI助手 - 免费办公智能AI助手, AI写作,下载…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
高效的后台管理系统——可进行二次开发
随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...
