算法篇之(Map Set)

news2024/12/25 10:50:35

前言:前面学习了List线性表的数组、链表数据结构,本篇博客主要学习和List相似的数据结构:Map和Set。

目录

思维导图

有效字母异位词

两数之和


思维导图

有效字母异位词

可以用哈希表实现

先创建哈希表, dic1={}对每个字符串进行遍历,for item in s: 

如果遍历出的字母在哈希表里不存在,则在哈希表里添加key,默认值是+1;如果遍历出的字母在哈希表里存在,则在原始的key对应的值上加1,dic1[item] = dic1.get(item,0)+1

最后比较两个表的key和value是否相等,相等返回true,不相等返回false,return dic1 == dic2

关键代码:dic1[item] = dic1.get(item,0)+1

这行代码作用就是先找到key,找到对应的value加+1,找不到,添加进入,然后value值+1

class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        dic1={}
        dic2={}
        for item in s:
            dic1[item] = dic1.get(item,0)+1
        for item in t:
            dic2[item] = dic2.get(item,0)+1
        return dic1 == dic2

两数之和

用两层for循环,时间复杂度O(n^2)

第一层for循环,取出数组里的下标和对应的值,for index,value in enumerate(nums):

第二层for循环,在第一层循环取到的下标基础上,取出数组里后面的数所对应的下标,for j in range(index+1,len(nums)):,举例:nums=[2,3,5,6,8],当第一层循环拿出下标0,值2时,第二层循环拿出下标1,值3,....,下标4,值8

进行判断,两次拿出的数等于目标值,则返回对应的下标, if value+nums[j] == target:

需要注意的点:

第2层循环取下标和值时,不包括第一层循环取出来的数,用的是index+1

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for index,value in enumerate(nums):
            for j in range(index+1,len(nums)):
                if value+nums[j] == target:
                    return [index,j]

用哈希表实现,时间复杂度O(n)

先创建一个空的哈希表,hash_map = {}

取出数组里的下标和值,for index,value in enumerate(nums):

将取出的下标和值放进哈希表中,hash_map[value] = index,举例:nums=[2,3,5,6,8],hash_map = {2:0,3:1,5:2,6:3,8:4}

在哈希表中找值,如果目标值减去取出的值所在的值不为空,返回此值和取出值所在的索引,举例,如果目标值是8,当for循环取到3这个值时,去哈希表中找8-5这个key所在的value,如果有,就返回其value,也就是2,同时也返回3这个值所在的下标值1,if hash_map.get(target-value) is not None: return(hash_map.get(target-value),index)

需要注意的点,在往哈希表里存放时,用的是hash_map[value] = index,值作为key,下标作为value,从哈希表里找值时,用的是hash_map.get(target-value),找到的是key,通过key,找value也是下标值。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        hash_map = {}
        for index,value in enumerate(nums):
            if hash_map.get(target-value) is not None:
                return(hash_map.get(target-value),index)
            hash_map[value] = index

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

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

相关文章

【C语言学习】条件运算符、逻辑运算、运算符优先级

一、条件运算符 条件?条件满足时的值:条件不满足时的值 count (count>20)?count-10:count10;等同于 if( count>20 )count count-10; elsecount count10; 优先级 条件运算符的优先级高于赋值运算符,但低于其他运算符。 尽量不要…

k8s 自身原理 2

前面我们说到 K8S 的基本原理和涉及的四大组件,分享了前两个组件 etcd 和 ApiServer 这一次我们接着分享一波: 调度器 scheduler控制器管理器 controller manager 调度器 scheduler 调度器,见名知意,用于调度 k8s 资源的&…

复现Cell图表:pyscenic分析之转录因子二项值热图

接上一节视频教程的分析结果(pyscenic分析:视频教程)。今天我们复现一篇cell子刊的图表,这篇文章有一副关于转录因子的图表,观察这个图有什么特点呢?第一是热图是二项值热图,只有0,1两个值,我们…

Rikka with Square Numbers 2023“钉耙编程”中国大学生算法设计超级联赛(8)hdu7370

Problem - 7370 题目大意&#xff1a;给出两个数a&#xff0c;b&#xff0c;每次操作可以使其中一个数加上或减去一个任意的完全平方数&#xff0c;问要使a&#xff0c;b相等需要的最少操作次数是多少 1<a,b<1e9,a!b 思路&#xff1a;我们可以将问题转化为将a和b的差w…

Qt 多线程、信号和槽连接方式推荐connect(Sender,Singnal,Receiver,Slot,ConnectMode);如下图所示

connect&#xff08;主线程A&#xff0c;信号A,子线程B,槽函数B,DirectConnection /AutoConnection ); connect&#xff08;子线B,信号B,主线程A,槽函数A,QueueConnection );

电脑连接安卓设备显示offline

The Android is offline. This can be resolved by physically disconnecting and...用USB线连接手机和电脑&#xff0c;打开cmd&#xff0c;输入adb devices -l, adb devices -l结果显示可以识别手机&#xff0c;但是状态为offline 打开另外一个终端&#xff0c;输入 adb k…

Java面向对象学习第三部分

一、Static修饰符 static是静态的意思&#xff0c;基本概念如下&#xff1a; Static分类&#xff1a; 一般我们分类都是按照是否使用static修饰进行分类。分为静态变量&#xff08;类变量&#xff09;、实例变量。 静态变量和实例变量的比较&#xff1a; 比较&#xff0c;…

(贪心) 剑指 Offer 14- I. 剪绳子 ——【Leetcode每日一题】

❓剑指 Offer 14- I. 剪绳子 难度&#xff1a;中等 给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长度的 m 段&#xff08;m、n都是整数&#xff0c;n > 1 并且 m > 1&#xff09;&#xff0c;每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m…

Python机器学习实战-建立AdaBoost模型预测肾脏疾病(附源码和实现效果)

实现功能 建立AdaBoost模型&#xff08;集成学习&#xff09;预测肾脏疾病 实现代码 import pandas as pd import warnings warnings.filterwarnings("ignore") pd.set_option(display.max_columns, 26)#读取数据 df pd.read_csv("E:\数据杂坛\datasets\kidn…

江南大学轴承数据故障诊断(利用一维CNN进行故障诊断,代码和数据放在压缩包,无需修改任何东西,解压缩后直接运行,有详细注释)

1.江南大学轴承数据集介绍 采样频率&#xff1a;50khz&#xff0c;采样时间&#xff1a;10s 转速&#xff1a;600 800 1000/rpm 内圈&#xff1a;ib 外圈&#xff1a;ob 滚动体&#xff1a;tb 正常&#xff1a;N 以600转速下的内圈故障数据为例展示&#xff1a; 开始数据…

内网穿透实战应用-配置固定的远程桌面地址【内网穿透、无需公网IP】

配置固定的远程桌面地址【内网穿透、无需公网IP】 文章目录 配置固定的远程桌面地址【内网穿透、无需公网IP】第一步&#xff1a;保留TCP地址第二步&#xff1a;为远程桌面隧道配置固定的TCP地址第三步&#xff1a;使用固定TCP地址远程桌面 使用免费的cpolar生成的远程桌面公网…

STM32 定时器自动重装载寄存器ARR带来的影响,ARPE0和1区别

ARR是啥 自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器&#xff0c;也可以在每次发生更新事件 (UEV) 时传送到影子寄存器&#xff0c;这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 …

C语言:函数栈帧的创建和销毁(32位下观察)

一、寄存器&#xff08;0&#xff1a;3&#xff1a;35&#xff09; 1.寄存器有哪些&#xff1f;&#xff08;6种&#xff09;&#xff08;0&#xff1a;38&#xff1a;50&#xff09; 2.esp和ebp这两个寄存器中&#xff0c;存放的是什么&#xff1f;用来干嘛的&#xff1f;&a…

3.利用matlab计算不定积分和定积分(matlab程序 )

1.简述 不定积分 首先&#xff0c;通过符号变量创建一个符号函数&#xff0c;然后调用积分命令来计算函数的积分&#xff0c;示例如下&#xff1a; 注意&#xff1a;matlab中计算的不定积分结果中没有写上常数C&#xff0c;读者需要自己在使用的时候记得加上常数部分。 通常情…

auto-changelog的简单使用

auto-changelog的简单使用 自动化生成Git提交记录&#xff0c;CHANGELOG.md文件 github&#xff1a;https://github.com/cookpete/auto-changelog 安装 npm install -g auto-changelog配置脚本 package.json文件下 "scripts": {"changelog": "aut…

Java多线程(九)

目录 一、synchronized基本特点 二、synchronized加锁工作过程 2.1 无锁 2.2 偏向锁 2.3 轻量级锁 2.4 重量级锁 三、synchronized其他优化操作 3.1 锁消除 3.2 锁粗化 一、synchronized基本特点 开始是乐观锁&#xff0c;如果锁冲突频繁就会转换成悲观锁开始是轻量级锁&#x…

UWA Pipeline 2.5.0 版本更新说明

UWA Pipeline是一款面向游戏开发团队的本地协作平台&#xff0c;旨在为游戏开发团队搭建专属的DevOps研发交付流水线&#xff0c;提供可视化的CICD操作界面、高可用的自动化测试以及UWA性能保障服务的无缝贴合等实用功能。 UWA Pipeline 2.5.0 版本发布&#xff0c;一批新功能…

Python系统学习1-6-元组

】目录 一、列表与字符串转换 二、列表推导式 三、元组 1、元组基本操作 2、元组和列表的内存图 四、容器思想 homework 一、列表与字符串转换 (1) 列表转换为字符串&#xff1a; result "连接符".join(列表) # 根据xx条件&#xff0c;循环拼接字符串 # 需…

指针---进阶篇(二)

指针---进阶篇&#xff08;二&#xff09; 前言一、函数指针1.抛砖引玉2.如何判断函数指针&#xff1f;&#xff08;方法总结&#xff09; 二、函数指针数组1.什么是函数指针数组&#xff1f;2.讲解函数指针数组3.模拟计算器&#xff1a;讲解函数指针数组 三、指向函数指针数组…

8年测试整理,接口测试-测试点分析与搜索查询测试点(超细汇总)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口可用性 主要…