leetcode-hot100-hash表

leetcode-hot100-hash表

  • 1. 两数之和
  • 49. 字母异位次分组
  • 128. 最长连续序列

hash表主要功能是:记录,当做查找表,时间换空间的一种策略

1. 两数之和

nums = [2,7,11,15], target = 9
输出:[0,1]
**解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

你可以假设每种输入只会对应一个答案。

第一思路:双层循环,第一层循环 i in [0, N], 第二层循环 j in [i+1, N], 依次计算nums[i] + nums[j],判断是否等于target;如果相等,返回下标i,j;否则继续遍历,直到循环结束,返回[-1, -1]表示不存在这组解。

 for i in range(0, N):for j in range(i+1, N):temp = nums[i] + nums[j]if temp == target:return [i, j]return [-1, -1]

存在的问题:时间复杂度过高。
因为是一个查找问题,所以想到用hash表。

如果我们先过一遍数组,将数值和下标的对应关系存储在hash表中。然后再过一遍数组,判断target - nums[i]是否在hash表中,如果在,说明知道了,返回即可;如果没找到,遍历下一个元素。
另外,我们可以将hash表存储和数组遍历合并到一次遍历中。

hash_table = {}for i in range(0, N):if target - nums[i] in hash_table:return [hash_table[target-nums[i]], i]hash_table[nums[i]] = ireturn [-1, -1] # 没找到
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:table = {}for i in range(len(nums)):if target - nums[i] in table:return [table[target-nums[i]], i]table[nums[i]] = ireturn [-1, -1]

49. 字母异位次分组

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: output:[ [“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”] ]

对数组中的每一项进行排序,这样异位词排序后顺序一致,我们可以把顺序一致的字符串合并,遍历结束后返回即可。

hash_table = defaultdict(list)for st in strs:key = "".join(sorted(st))hash_table[key].append(st)return hash_table.values()

异位次的统一化,可以通过数据统计实现,将异位次转换成统计信息,如a:3,表示a出现了3次。
因为是字母,我们可以用26个英文字符进行统计。

128. 最长连续序列

示例 1:

**输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

**输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

采用集合,记录数组中的每个元素;然后查找连续序列,最后再多个连续序列中查找最长序列。
如何查找连续序列?以当前元素为第一个元素,向后查找,如果找到了,继续找连续序列;因为连续序列,所以当前元素-1应该不在hash表或集合中。直到找不到,说明找到了以当前元素为第一个元素的连续序列;然后以下一个元素为起点查找新的序列。

hs = set(nums)longest = 0
for num in nums:if nums-1 not in hs:cur_len = 1cur_num = numswhile cur_num+1 in hs:cur_len += 1cur_num += 1longest = max(longest, cur_len)return longest
class Solution:def longestConsecutive(self, nums: List[int]) -> int:longest_streak = 0num_set = set(nums)for num in num_set:if num - 1 not in num_set:current_num = numcurrent_streak = 1while current_num + 1 in num_set:current_num += 1current_streak += 1longest_streak = max(longest_streak, current_streak)return longest_streakclass Solution {
public:int longestConsecutive(vector<int>& nums) {unordered_set<int> hash;for (auto x : nums)hash.insert(x);int longestSteak = 0;for (auto x: hash) {if (!hash.count(x-1)){int curNum = x, curSteak = 1;while (hash.count(curNum+1)) {curNum += 1;curSteak += 1;}longestSteak = max(longestSteak, curSteak);}}return longestSteak;}
};

hash表主要功能是:记录,当做查找表,时间换空间的一种策略

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

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

相关文章

幻兽帕鲁服务器多少钱?有买过的吗?

幻兽帕鲁服务器多少钱&#xff1f;太卷了&#xff0c;降价到24元1个月&#xff0c;阿里云4核16G10M游戏服务器26元1个月、149元半年&#xff0c;腾讯云4核16G游戏服务器32元、312元一年&#xff0c;华为云26元&#xff0c;京东云主机也是26元起。云服务器吧yunfuwuqiba.com给大…

VUE3环境搭建开发准备

VUE3 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vu…

【Prometheus】概念和工作原理介绍

目录 一、概述 1.1 prometheus简介 1.2 prometheus特点 1.3 prometheus架构图 1.4 prometheus组件介绍 1、Prometheus Server 2、Client Library 3、pushgateway 4、Exporters 5、Service Discovery 6、Alertmanager 7、grafana 1.5 Prometheus 数据流向 1.6 Pro…

100天精通Python(实用脚本篇)——第117天:基于selenium实现反反爬策略之代码输入账号信息登录网站

文章目录 专栏导读1. 前言2. 实现步骤3. 基础补充4. 代码实战4.1 创建连接4.2 添加请求头伪装浏览器4.3 隐藏浏览器指纹4.4 最大化窗口4.5 启动网页4.6 点击密码登录4.7 输入账号密码4.8 点击登录按钮4.9 完整代码4.10 GIF动图展示 五、总结 专栏导读 &#x1f525;&#x1f5…

httpx.InvalidURL: Invalid port

httpx.InvalidURL: Invalid port 介绍解决方案总结 介绍 httpx包的bug&#xff0c;使用GPT-SoVITS时无法运行报的错 解决方案 改源码的这个文件lib/python3.9/site-packages/httpx/_urlparse.py&#xff1a;149行左右&#xff1a; def urlparse(url: str "", **…

IDEA安装配置以及安装配置Maven

IEDA官方下载地址&#xff0c;有专业版&#xff08;收费&#xff0c;破解&#xff09;&#xff0c;社区版&#xff08;免费&#xff09; 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 安装配置Maven 1.解压apache-maven-3.6.3-bin.zip&#xff0c;安装maven到D盘softwar…

台湾旺泓-WH4530A三合一光距感 接近传感芯片

WH4530A是一款集成了环境光传感器&#xff08;PS&#xff09;接近传感器&#xff08;ALS&#xff09;和红外LED灯三合一为一体的光距感传感芯片&#xff0c;可以测距从0到100厘米以内范围&#xff1b;并采用I2C接口具有超高的灵敏度和精准的测距检测范围。 该WH4530A​​​​​…

真香!NineData SQL开发全面适配 GaiaDB

2 月&#xff0c;新年伊始&#xff0c;NineData 重磅发布&#xff0c;提供了对百度云原生关系型数据库 GaiaDB 的支持。 这一次的发布不仅仅是简单的数据源支持&#xff0c;而是覆盖了整个 SQL 开发能力的重要发布&#xff0c;意味着您已经可以完整地使用 NineData SQL 开发的…

MySQL 事务原理分析

事务 前提&#xff1a;并发连接访问。定义&#xff1a;事务是用户定义的一系列操作&#xff0c;这些操作要么都做&#xff0c;要么都不做&#xff0c;是一个不可分割的单位。目的&#xff1a;事务将数据库从一种一致性状态转换为另一种一致性状态&#xff0c;保证系统始终处于…

半导体物理基础-笔记(续)

源内容参考&#xff1a;https://www.bilibili.com/video/BV11U4y1k7zn/?spm_id_from333.337.search-card.all.click&vd_source61654d4a6e8d7941436149dd99026962 掺杂半导体的费米能级与温度及杂质浓度的关系图 在温度一定的条件下&#xff0c;施主杂质浓度越高&#xff0…

接口测试实战--读取yaml用例

一、yaml模块用法 使用场景: 配置文件、测试用例文件等 语法: 大小写敏感 使用缩进表示层级关系 缩进时不允许用tab键,只能使用空格 缩进的空格数目不重要,只要相同层级的元素左对齐 #表示注释 基本数据类型:字符串、整型、列表、null(可使用~表示)、布尔型、时间 1)…

Redis操作

1、KEY操作 1.1 exists 1.2 expire 设置过期时间 expire name 5 1.3 ttl 如果不过期返回-1 1.4 del 2、字符串值&#xff08;String&#xff09; 2.1 set 2.2 get 2.3 setnx 当且仅当key不存在时才新增 不存在时返回1&#xff0c;存在返回0 2.4 setex 设置key的存活时间&am…

Oracle EBS GL 外币折算逻辑

背景 由于公司财务在10月份期间某汇率维护错误,导致帐套折算以后并合传送至合并帐套生成合并日记帐凭证的借贷金额特别大,但是财务核对的科目余额有没有问题,始终觉得合并日记帐生成会计分发有问题,需要我们给出外币折算逻辑。 基础设置 汇率 Path: GL->设置->币种-&…

pclpy 最小二乘法拟合平面

pclpy 最小二乘法拟合平面 一、算法原理二、代码三、结果1.左边原点云、右边最小二乘法拟合平面后点云投影 四、相关数据 一、算法原理 平面方程的一般表达式为&#xff1a; A x B y C z D 0 ( C ≠ 0 ) Ax By Cz D 0 \quad (C\neq0) AxByCzD0(C0) 即&#xff1a; …

【JSON详细讲解】

JSON讲解 1. 介绍2. JSON的基本规则3. JSON中的数据类型4. JSON的基本结构5. 在不同的语言中使用JSON 1. 介绍 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它是基于JavaScript的一个子集&#xff0c;但它是独立于语言的&a…

矢量扩散模型初探

import paddle from matplotlib import pyplot as plt import numpy as np from tqdm import tqdm# 从零开始构建一个简单的扩散模型 # 首先是扩散过程 # loss=label-net(sqrt(alpha_prod[t])*x0+sqrt(1-alpha_prod[t])*label) # label =正太分布采样 # alpha 是 一个斜边为1 的…

Java中使用链表实现的数据结构

在Java中&#xff0c;链表实现主要体现在以下几种数据结构中&#xff1a; 1. LinkedList LinkedList类实现了List接口和Deque接口&#xff0c;提供了双向链表的实现。它允许null元素&#xff0c;提供了列表的顺序访问以及在列表的头部和尾部进行高效的插入和移除操作。Linked…

Spring Boot对接RocketMQ示例

部署服务 参考RocketMq入门介绍 示例 引入maven依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version></dependency>完整依赖如下&am…

C++ 游戏飞机大战, 字符型的

//#define _CRT_SECURE_NO_WARNINGS 1 用于禁止不安全函数的警告 #include<iostream> #include<stdlib.h> #include<string> #include<conio.h> #include<Windows.h> #include<time.h> #include <graphics.h> using namespace std;…

Rust升级慢,使用国内镜像进行加速

背景 rustup 是 Rust 官方的跨平台 Rust 安装工具&#xff0c;国内用户使用rustup update的时候&#xff0c;网速非常慢&#xff0c;可以使用国内的阿里云镜像源来进行加速 0x01 配置方法 1. Linux与Mac OS用户配置环境变量 修改~/.bash_profile文件添加如下内容&#xff1…