每日算法-250514
每日算法学习记录 (2024-05-14)
今天记录三道 LeetCode 算法题的解题思路和代码。
1. 两数之和
题目截图:
解题思路
这道题要求我们从一个整数数组中找出两个数,使它们的和等于一个给定的目标值 target
,并返回这两个数的下标。
核心思路是使用 哈希表 来优化查找过程:
- 我们遍历数组
nums
。对于当前遍历到的元素num
(设其下标为i
),我们期望找到另一个数complement = target - num
。 - 在遍历过程中,我们检查哈希表中是否已经存在
complement
。- 如果哈希表中包含
complement
,说明我们找到了这两个数。哈希表中存储了complement
及其对应的下标。此时,直接返回[哈希表中complement的下标, 当前下标 i]
。 - 如果哈希表中不包含
complement
,则将当前的num
及其下标i
存入哈希表,供后续的元素查找配对。
- 如果哈希表中包含
这样,每个元素只需要被访问一次,哈希表的查找和插入操作平均时间复杂度为 O ( 1 ) O(1) O(1)。
复杂度
- 时间复杂度: O ( n ) O(n) O(n), 其中 n n n 是数组
nums
的长度。我们只需要遍历一次数组。 - 空间复杂度: O ( n ) O(n) O(n), 最坏情况下,哈希表需要存储 n n n 个元素(例如,没有找到配对或者所有元素都不同且需要到最后才找到配对)。
Code
class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> hashTable = new HashMap<>();for (int i = 0; i < nums.length; i++) {int num = nums[i];int complement = target - num;if (hashTable.containsKey(complement)) {return new int[] {hashTable.get(complement), i};}hashTable.put(num, i);}return new int[]{-1, -1}; }
}
1512. 好数对的数目
题目截图:
解题思路
题目要求计算数组中 “好数对” (i, j)
的数量,其中 nums[i] == nums[j]
且 i < j
。
我们可以遍历数组,对于每个元素 nums[x]
:
- 我们需要知道在它之前(即下标小于
x
的位置)有多少个与nums[x]
相等的元素。 - 这些先前出现的相等元素都可以与当前的
nums[x]
组成一个好数对。
为了高效地统计先前出现元素的数量,我们可以使用一个计数数组(或哈希表)。由于题目说明 1 <= nums[i] <= 100
,一个大小为 101 的数组 counts
即可胜任,其中 counts[k]
用来记录数字 k
到目前为止出现的次数。
遍历 nums
数组中的每个数字 num
:
- 在遇到当前的
num
时,counts[num]
的值即为之前已经出现过的num
的数量。这些都可以与当前的num
配对,所以将counts[num]
加到总结果ret
中。 - 然后,将
counts[num]
的值加 1,表示当前的num
也被统计进去了,供后续元素配对使用。
这个过程 ret += counts[num]++;
巧妙地实现了先加旧值再更新的逻辑。
复杂度
- 时间复杂度: O ( n ) O(n) O(n), 其中 n n n 是数组
nums
的长度。我们只需要遍历一次数组。 - 空间复杂度: O ( C ) O(C) O(C), 其中 C C C 是数字的取值范围(本题中为 100)。由于 C C C 是常数,可以认为是 O ( 1 ) O(1) O(1)。
Code
class Solution {public int numIdenticalPairs(int[] nums) {int ret = 0;int[] counts = new int[101]; for (int num : nums) {ret += counts[num];counts[num]++;}return ret;}
}
1128. 等价多米诺骨牌对的数量
题目截图:
解题思路
题目定义了多米诺骨牌的等价关系:[a, b]
与 [c, d]
等价,当且仅当 (a == c && b == d)
或者 (a == d && b == c)
。我们需要计算等价多米诺骨牌对的数目。
这个问题的核心在于如何识别等价的骨牌。我们可以为每一张骨牌 [a, b]
定义一个 规范表示。由于 1 <= dominoes[i][j] <= 9
,一个常用的方法是将骨牌表示为一个两位数。为了保证 [a, b]
和 [b, a]
有相同的规范表示,我们可以约定将较小的数字放在十位,较大的数字放在个位(或者反之,只要统一即可)。
例如,如果约定将较大的数字编码在前面,则对于骨牌 [x, y]
,其规范键可以表示为 max(x, y) * 10 + min(x, y)
。这样,[1, 2]
和 [2, 1]
都会被映射到 2 * 10 + 1 = 21
。
代码中的实现是:
int key = (x[0] > x[1]) ? (x[0] * 10 + x[1]) : (x[1] * 10 + x[0]);
这等价于 max(x[0], x[1]) * 10 + min(x[0], x[1])
。
一旦我们有了规范的键,问题就转化为了统计具有相同键的骨牌数量,这与上一题 “好数对的数目” 的逻辑类似:
- 使用一个计数数组
counts
(由于键的范围是11
到99
,数组大小为 100 即可,counts[key]
记录键key
出现的次数)。 - 遍历所有多米诺骨牌
domino
:
a. 计算其规范键key
。
b. 当前骨牌domino
可以与之前出现过的counts[key]
个具有相同规范键的骨牌组成等价对。将counts[key]
加到总结果ret
中。
c. 然后,将counts[key]
的值加 1。
复杂度
- 时间复杂度: O ( n ) O(n) O(n), 其中 n n n 是
dominoes
数组的长度。我们只需要遍历一次数组。 - 空间复杂度: O ( C ) O(C) O(C), 其中 C C C 是规范键的可能数量(最大为
99
)。由于 C C C 是常数,可以认为是 O ( 1 ) O(1) O(1)。
Code
class Solution {public int numEquivDominoPairs(int[][] dominoes) {int ret = 0;int[] counts = new int[100]; for (int[] domino : dominoes) {int key = (domino[0] > domino[1]) ? (domino[0] * 10 + domino[1]) : (domino[1] * 10 + domino[0]);ret += counts[key];counts[key]++;}return ret;}
}
相关文章:

每日算法-250514
每日算法学习记录 (2024-05-14) 今天记录三道 LeetCode 算法题的解题思路和代码。 1. 两数之和 题目截图: 解题思路 这道题要求我们从一个整数数组中找出两个数,使它们的和等于一个给定的目标值 target,并返回这两个数的下标。 核心思路是使用 哈希…...

嵌入式培训之数据结构学习(三)gdb调试、单向链表练习、顺序表与链表对比
目录 一、gdb调试 (一)一般调试步骤与命令 (二)找段错误(无下断点的地方) (三)调试命令 二、单向链表练习 1、查找链表的中间结点(用快慢指针) 2、找出…...

虚拟机安装CentOS7网络问题
虚拟机安装CentOS7网络问题 1. 存在的问题1.1 CentOS7详细信息 2. 解决问题3.Windows下配置桥接模式 1. 存在的问题 虽然已经成功在虚拟机上安装了CentOS7,但是依旧不能上网。 1.1 CentOS7详细信息 [fanzhencentos01 ~]$ hostnamectlStatic hostname: centos01Ic…...
零基础学Java——终章:核心知识点与面试总结
Java核心知识点与面试总结 本文档旨在总结Java的核心知识点,并提供常见的面试问题与解答,帮助学习者巩固知识和准备面试。 目录 零基础学Java——大纲合集 Java基础 1. Java概述 JDK (Java Development Kit): Java开发工具包,包含Java的…...

迅为RK3588开发板安卓GPIO调用APP运行测试
将网盘上的安卓工程文件复制到 Windows 电脑上。确保工程路径中使用英文字符,不包含中文。接着,启动 Android Studio,点击“Open”按钮选择应用工程文件夹,然后点击“OK”。由于下载 Gradle 和各种 Jar 包可能需要一段时间&#x…...
在一台CentOS服务器上开启多个MySQL服务
1. 创建目录 mkdir -p /data/mysql3307/{data,tmp,logs} # 赋权 chown -R mysql:mysql /data/mysql3307 chmod -R 750 /data/mysql3307 2.修改 /etc/my.cnf ,添加[mysqld3307]实例配置组 [mysqld3307] # mysql服务的端口 port 3307 # 套接字文件存放路径 socket /…...
C#高级编程:IO和序列化
在 C# 编程中,输入输出(IO)和序列化是两个至关重要的概念,它们为数据的存储、读取以及在不同环境间的传输提供了强大的支持。无论是开发小型应用程序,还是构建复杂的企业级系统,深入理解并熟练运用 IO 和序列化技术都是必不可少的。 一、C# 中的 IO 基础 1、文件流…...

Unity 红点系统
首先明确一个,即红点系统的数据结构是一颗树,并且红点的数据结构的初始化需要放在游戏的初始化中,之后再是对应的红点UI侧的注册,对应的红点UI在销毁时需要注销对红点UI的显示回调注册,但是不销毁数据侧的红点注册 - …...

尼康VR镜头防抖模式NORMAL和ACTIVE的区别(私人笔记)
1. NORMAL 模式(常规模式) 适用场景:一般手持拍摄,比如人像、静物、风景或缓慢平移镜头(如水平追拍)等。工作特性: 补偿手抖引起的小幅度震动(比如手持时自然的不稳)&am…...
JMeter 中通过 WebSocket (WS) 协议发送和接收 Protocol Buffers (Proto) 消息
在 JMeter 中通过 WebSocket (WS) 协议发送和接收 Protocol Buffers (Proto) 消息,需要使用 JMeter WebSocket 插件,并结合 JSR223 脚本处理 Proto 的序列化和反序列化。以下是完整步骤: 1. 准备工作 1.1 安装 WebSocket 插件 下载插件&…...

从索引中排除 Elasticsearch 字段
作者:来自 Elastic Kofi Bartlett 说明如何配置 Elasticsearch 排除字段、为什么要这样做,以及应遵循的最佳实践。 更多阅读:Elasticsearch:inverted index,doc_values 及 source 想获得 Elastic 认证?了解…...
【Android】文件分块上传尝试
【Android】文件分块上传 在完成一个项目时,遇到了需要上传长视频的场景,尽管可以手动限制视频清晰度和视频的码率帧率,但仍然避免不了视频大小过大的问题,且由于服务器原因,网络不太稳定。这个时候想到了可以将文件分…...

超详细Docker教程
前言:大家在在Linux上部署mysql及其他软件时,大家想一想自己最大的感受是什么? 我相信,除了个别天赋异禀的人以外,大多数人都会有相同的感受,那就是麻烦。核心体现在三点: 命令太多了ÿ…...

Java项目拷打(外卖+点评)
一、点评星球(黑马点评) 1、项目概述 1.1、项目简介 本项目是基于Spring Boot与Redis深度整合的前后端分离的点评平台。系统以Redis为核心技术支撑,重点解决高并发场景下的缓存穿透、击穿、雪崩等问题,涵盖商户展示、优惠券秒杀…...
hadoop中了解yarm
Hadoop中的YARN(Yet Another Resource Negotiator)是一种新的Hadoop资源管理器,是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。以下是其相关介绍: 核心思想 将JobTracker的资源管理和作业调度/监控功…...
Android usb网络共享详解
Android usb网络共享详解 文章目录 Android usb网络共享详解一、前言二、USB网络共享使用的前提1、Android设备支持adb 并且打开usb开关2、原生Settings能看到USB网络共享开关3、代码中检测USB网络共享是否支持 三、Settings 中USB网络共享代码的部分代码1、Settings\res\xml\t…...
【数据库知识】Mysql进阶-高可用MHA(Master High Availability)方案
mysql高可用MHA(Master High Availability)方案 集群部署模式下的高可用方案一、高可用架构原理1. 核心组件2. 故障切换流程 二、详细部署步骤 (3节点集群)1. 环境准备2. 节点配置(以 node1 为例)3. 初始化集群4. 部署MySQL Route…...
Web 架构之会话保持深度解析
文章目录 一、引言二、会话保持的基本概念2.1 什么是会话2.2 为什么需要会话保持 三、会话保持的常见实现方式3.1 基于客户端的会话保持3.1.1 Cookie 方式3.1.2 URL 重写方式 3.2 基于服务器端的会话保持3.2.1 负载均衡器会话保持3.2.2 会话共享 四、会话保持可能遇到的问题及解…...

微信小程序仿淘宝拍照/照片点位识图、点位裁剪生图、图片裁剪组件、图片点位框选、裁剪生成图片,canvasToImg
实现效果 效果: 1.微信小程序仿淘宝拍照/照片点位识图、根据点位裁剪生图、图片可裁剪、图片高度可控 2.识别点位自动生成标准构图方案,支持手动微调实现像素级精准裁剪 3.可以根据接口识别的点位信息实现拍照/相册图片特征点自动识别并裁剪 实现步骤 …...
attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第二维度,第三维度
attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第1 维度,第二维度 attention_weights = torch.ones_like(prompt_embedding[:, :, 0]) 这行代码的作用是创建一个与 prompt_embedding[:, :, 0] 形状相同且所有元素都为 1 的张量,它用于初始化…...
Rust入门之高级Trait
Rust入门之高级Trait - 本文源码 引言 前面学习了迭代器(Iterators),Iterator源码中就用到了关联类型的功能。关联类型就属于高级trait的内容,这次我们学习一下高级trait,了解关联类型等知识。关联类型看似和泛型相…...
从 Set、Map 到 WeakSet、WeakMap 的进阶之旅
在 ES5 时代,JavaScript 的数据结构主要依赖于两种类型:数组和对象。然而,随着应用规模的增长和复杂性上升,传统的数据结构越来越难以满足开发需求。比如,需要一个能自动去重的集合、一个支持任意类型键名的字典、一个…...
TTL (Time-To-Live) 解析
文章目录 TTL (Time-To-Live) 解析:网络与Java中的应用一、TTL的定义二、TTL在网络中的应用1. **路由和数据包的生命周期**2. **DNS中的TTL**3. **防止环路** 三、TTL在Java中的应用1. **缓存管理**2. **Java中的ThreadLocal**3. **网络通信中的TTL** 四、TTL的注意…...

Qt/C++开发监控GB28181系统/录像文件查询/录像回放/倍速播放/录像文件下载
一、前言 搞定了实时预览后,另一个功能就是录像回放,录像回放和视频点播功能完全一致,唯一的区别就是发送点播的sdp信息中携带了开始时间和结束时间,因为是录像文件,所以有这个时间,而实时视频预览这个对应…...

季报中的FPGA行业:U型反转,春江水暖
上周Lattice,AMD两大厂商相继发布2025 Q1季报,尽管恢复速度各异,但同时传递出FPGA行业整体回暖的复苏信号。 5月5日,Lattice交出了“勉强及格”的答卷,报告季度营收1亿2000万,与华尔街的预期基本相符。 对于这家聚焦在中小规模器件的领先厂商而言,按照其CEO的预期,长…...

嵌入式机器学习平台Edge Impulse图像分类 – 快速入门
陈拓 2025/05/08-2025/05/11 1. 简介 官方网址 https://edgeimpulse.com/ 适用于任何边缘设备的人工智能: Gateways - 网关 Sensors & Cameras - 传感器和摄像头 Docker Containers - Docker容器 MCUs, NPUs, CPUs, GPUs 构建数据集、训练模型并优化库以…...
web 自动化之 yaml 数据/日志/截图
文章目录 一、yaml 数据获取二、日志获取三、截图 一、yaml 数据获取 需要安装 PyYAML 库 import yaml import os from TestPOM.common import dir_config as Dir import jsonpathclass Data:def __init__(self,keyNone,file_name"test_datas.yaml"):file_path os…...
ARMV8 RK3399 u-boot TPL启动流程分析 --start.S
上电后运行的第一支文件:arch/arm/cpu/armv8/start.S CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK1 #include <asm/arch/boot0.h> 跳转到 arch/arm/include/asm/arch-rockchip/boot0.h CONFIG_SPL_BUILD1 b 1f ROCKCHIP_EARLYRETURN_TO_BROMno TINY_FRAMEWORKno …...

zst-2001 上午题-历年真题 计算机网络(16个内容)
网络设备 计算机网络 - 第1题 ac 计算机网络 - 第2题 d 计算机网络 - 第3题 集线器不能隔离广播域和冲突域,所以集线器就1个广播域和冲突域 交换机就是那么的炫,可以隔离冲突域,有4给冲突域,但不能隔离广播域…...

使用termius连接腾讯云服务器
使用termius连接腾讯云服务器 1.下载termius termius官网 安装配置教程 这里安装的window版本> 默认安装到C盘,不建议修改路径 可以选择谷歌登录,也可以不登录,软件是免费的,试用的是付费版本,不需要点 2.配置 这里…...