常用枚举技巧:基础(一)

文章目录

  • 常用枚举技巧:基础(一)
    • LeetCode 1. 两数之和
      • 思路
      • Golang 代码
    • LeetCode 2441. 与对应负数同时存在的最大正整数
      • 思路
      • Golang 代码
    • LeetCode 1512. 好数对的数目
      • 思路
      • Golang 代码
    • LeetCode 2001. 可互换矩形的对数
      • 思路
      • Golang 代码
    • LeetCode 1128. 等价多米诺骨牌对的数量
      • 思路
      • Golang 代码

常用枚举技巧:基础(一)

在这里插入图片描述

今天学习序列当中的常见问题。一个最典型的场景就是“双变量问题”,以经典的「LeetCode 1. 两数之和」为例,解决这道题需要维护i, j两个变量,但是在序列中可以通过「枚举右,维护左」的思路来将双变量问题转化为单变量问题,从而只使用一次循环来解决双变量问题(如果直接使用暴力枚举,双变量问题的时间复杂度就是 O ( n 2 ) O(n^2) O(n2)

LeetCode 1. 两数之和

思路

这道题目非常的经典,但是今天重做之前我发现我过去都是通过两次循环,以 O ( 2 n ) O(2n) O(2n)的时间复杂度来解决这个问题的,也就是先用一次循环在 hash map 中记录每一个数据出现的位置,然后在第二次循环中枚举target - nums[i]是否在 hash map 中存在,以及mp[target - nums[i]]是否与当前枚举的下标j相等。

通过枚举右维护左,可以通过一次循环直接解决这道问题,也就是将上述两个循环合并。

Golang 代码

func twoSum(nums []int, target int) []int {n := len(nums)mp := map[int]int{}for i := 0; i < n; i ++ {if j, ok := mp[target - nums[i]]; ok && i != j {return []int{i, j}}mp[nums[i]] = i}return []int{}
}

LeetCode 2441. 与对应负数同时存在的最大正整数

思路

同样使用枚举右维护左的思路,如果枚举到右侧的某个nums[j],发现-nums[j]已经存在于 hash map 当中,那么就记录一次答案。

Golang 代码

func findMaxK(nums []int) int {n := len(nums)mp := map[int]bool{}ans := -1for i := 0; i < n; i ++ {if _, ok := mp[-nums[i]]; ok {curr := nums[i]if curr < 0 {curr = -curr}ans = max(curr, ans)}mp[nums[i]] = true}return ans
}

LeetCode 1512. 好数对的数目

思路

仍然“枚举右维护左”,我们需要使用 hash map 记录nums[i]的出现次数,并每次都统计答案。运用 Golang map 的性质,未出现在 map 当中的 key,其 value 为零值,据此我们不需要特判,可以直接维护答案。

Golang 代码

func numIdenticalPairs(nums []int) int {mp := map[int]int{}ans := 0for _, x := range nums {ans += mp[x]mp[x] ++}return ans
}

LeetCode 2001. 可互换矩形的对数

思路

这道题不要想的过于复杂,直接使用一个 key 为 float64 的 map 记录答案即可。虽然说对于 Golang 的 map 而言,key 需要是可比较的,而对于 float32/float64 而言,其==比较是不准确的,但是直接使用 float64 的 map AC 这道题是没问题的。

Golang 代码

func interchangeableRectangles(rectangles [][]int) int64 {mp := map[float64]int{}ans := 0for _, rec := range rectangles {w, h := rec[0], rec[1]key := float64(w) / float64(h)ans += mp[key]mp[key] ++}return int64(ans)
}

LeetCode 1128. 等价多米诺骨牌对的数量

思路

由于一开始没有看到「提示」,这道题卡了我一下。看到提示之后发现dominoes[i][j]的值必然是个位数,这就意味着可以将每一个二维数组转为一个整型,然后使用这个整型值作为 hash map 的 key。之后使用「枚举右维护左」正常求解答案即可。

Golang 代码

func numEquivDominoPairs(dominoes [][]int) int {mp := map[int]int{}ans := 0for _, dom := range dominoes {x, y := dom[0], dom[1]if x < y {x, y = y, x}curr := x * 10 + yans += mp[curr]mp[curr] ++}return ans
}

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

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

相关文章

从混乱到秩序:探索管理系统如何彻底改变工作流程

内容摘要 在许多企业与组织中&#xff0c;工作流程混乱是阻碍发展的“绊脚石”。员工们常常被繁琐的步骤、模糊的职责和沟通不畅等问题搞得焦头烂额&#xff0c;工作效率低下&#xff0c;错误频发。而与之形成鲜明对比的是&#xff0c;一些引入了先进管理系统的团队&#xff0…

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…

华为×小鹏战略合作:破局智能驾驶深水区的商业逻辑深度解析

当中国智能电动车竞争进入下半场&#xff0c;头部玩家的合纵连横正在重构产业格局。华为与小鹏汽车近日官宣的“战略合作”&#xff0c;表面看是技术互补的常规操作&#xff0c;实则暗藏改写行业游戏规则的深层商业逻辑。 一、技术破壁&#xff1a;从“单点突破”到“全栈协同”…

Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(六):图片上传交互功能

在 《Tailwind CSS 实战&#xff1a;基于 Kooboo 构建 AI 对话框页面&#xff08;五&#xff09;》 中&#xff0c;完成了语音交互功能的优化。本文作为该系列教程的第六篇&#xff0c;将聚焦于图片上传功能的开发。通过集成图片上传与预览能力&#xff0c;我们将进一步完善 AI…

40. 自动化异步测试开发之编写异步业务函数、测试函数和测试类(类写法)

40. 自动化异步测试开发之编写异步业务函数、测试函数和测试类&#xff08;类写法&#xff09; 一、类结构设计解析 1.1 基类设计 class Base:async_driver None # &#x1f697; 存储浏览器驱动实例async def get(self, url: str http://secure.smartbearsoftware.com/.…

面向开发者的提示词工程④——文本推断(Inferring)

文章目录 前言一、情感&#xff08;正向/负向&#xff09;二、识别情感类型三、识别愤怒四、从客户评论中提取产品和公司名称五、一次完成多项任务 前言 面向开发者的提示词工程——导读 在这节课中&#xff0c;你将从产品评论和新闻文章中推断情感和主题。 举了个商品评论的例…

java day15 (数据库)

进入数据库的学习 DB 因为数据太多了&#xff0c;方便统一管理的软件 操作就不用改代码了&#xff0c;直接改数据库则可&#xff1b; 命令就是sql语句 这些都是关系型数据库&#xff0c;sql可以控制全部&#xff0c;至于具体的环境我以前就有安装过了&#xff1b; 理解&am…

国标GB28181设备管理软件EasyGBS远程视频监控方案助力高效安全运营

一、方案背景​ 在商业快速扩张的背景下&#xff0c;连锁店门店数量激增&#xff0c;分布范围广。但传统人工巡检、电话汇报等管理方式效率低下&#xff0c;存在信息滞后、管理盲区&#xff0c;难以掌握店铺运营情况&#xff0c;影响企业效率与安全。网络远程视频监控系统可有…

Python 字典(dict)的高级用法与技巧

今天我们继续深入讲解 Python 字典的 高级用法与技巧&#xff0c;包括&#xff1a; defaultdict&#xff1a;带默认值的字典Counter&#xff1a;快速统计工具字典排序&#xff1a;按键或值排序合并字典&#xff08;传统方式和 Python 3.9 新语法&#xff09;嵌套字典的安全访问…

动静态库的使用(Linux)

1.库 通俗来说&#xff0c;库就是现有的&#xff0c;可复用的代码&#xff0c;例如&#xff1a;在C/C语言编译时&#xff0c;就需要依赖相关的C/C标准库。本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统载入内存执行。通常我们可以在windows下看到一些后…

R²ec: 构建具有推理能力的大型推荐模型,显著提示推荐系统性能!!

摘要&#xff1a;大型推荐模型通过编码或项目生成将大型语言模型&#xff08;LLMs&#xff09;扩展为强大的推荐工具&#xff0c;而近期在LLM推理方面的突破也同步激发了在推荐领域探索推理的动机。目前的研究通常将LLMs定位为外部推理模块&#xff0c;以提供辅助性思考来增强传…

【Java后端基础 005】ThreadLocal-线程数据共享和安全

&#x1f4da;博客主页&#xff1a;代码探秘者 ✨专栏&#xff1a;文章正在持续更新ing… ✅C语言/C&#xff1a;C&#xff08;详细版&#xff09; 数据结构&#xff09; 十大排序算法 ✅Java基础&#xff1a;JavaSE基础 面向对象大合集 JavaSE进阶 Java版数据结构JDK新特性…

Tesseract配置参数详解及适用场景(PyTesseract进行OCR)

在使用 PyTesseract 进行 OCR 时&#xff0c;合理配置参数是提高识别准确率的关键。以下是 Tesseract 常用参数的详细解释和适用场景。 一、关键参数 &#xff08;1&#xff09;页面分割模式&#xff08;Page Segmentation Mode, --psm&#xff09; 控制 Tesseract 如何分析…

【Zephyr 系列 12】BLE + NVS + 低功耗融合实战:打造可配置蓝牙信标系统

🧠关键词:Zephyr、BLE 广播、信标、NVS 参数、低功耗、状态机、周期唤醒 📌适合人群:希望实现 BLE 信标类产品(定位标签、资产管理)的开发者 📊预计篇幅:约 5200+ 字 🎯 项目目标 构建一个可广泛应用于资产标签、定位信标、设备标识等场景的蓝牙广播模块,具备:…

图解浏览器多进程渲染:从DNS到GPU合成的完整旅程

目录 浏览器进程架构的演化 进程和线程关系图示 进程&#xff08;Process&#xff09; 线程&#xff08;Thread&#xff09; 协程&#xff08;Coroutine&#xff09; 进程&线程&协程核心对比 单进程和多进程浏览器 单进程浏览器​编辑 单进程浏览器存在的问题…

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…

C# 类和继承(抽象成员)

抽象成员 抽象成员是指设计为被覆写的函数成员。抽象成员有以下特征。 必须是一个函数成员。也就是说&#xff0c;字段和常量不能为抽象成员。必须用abstract修饰符标记。不能有实现代码块。抽象成员的代码用分号表示。 例如&#xff0c;下面取自一个类定义的代码声明了两个抽…

基于JWT+SpringSecurity整合一个单点认证授权机制

基于 JWT Spring Security 的授权认证机制&#xff0c;在整体架构设计上体现了高度的安全性与灵活性。其在整合框架中的应用&#xff0c;充分展示了模块化、可扩展性和高效鉴权的设计理念&#xff0c;为开发者提供了一种值得借鉴的安全架构模式。 1.SpringSecurity概念理解 …

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…

Git 切换到旧提交,同时保证当前修改不丢失

在 Git 中&#xff0c;可以通过以下几种方式切换到之前的提交&#xff0c;同时保留当前的修改 1. 使用 git checkout 创建临时分离头指针&#xff08;推荐用于查看代码&#xff09; git checkout <commit-hash>这会让你进入"分离头指针"状态&#xff0c;你可…