当前位置: 首页 > article >正文

力扣算法练习BM50—两数之和

题目

给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)

数据范围:2≤len(numbers)≤105,10≤numbersi​≤109,0≤target≤109

要求:空间复杂度 O(n),时间复杂度 O(nlogn)

示例1

输入:[3,2,4],6

返回值:[2,3]

说明:因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以返回[2,3]

解题思路

方法一:直接两个for循环遍历列表,找到相加等于target的元素下标,返回下标时需加一

方法二:遍历列表,若target减去遍历当前值再直接去找哈希表中是否有key,若有则返回排序后的下标并加一,若无则把上一个元素添加到哈希表中,再继续遍历列表

题解

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param numbers int整型一维数组 
# @param target int整型 
# @return int整型一维数组
#
class Solution:
    def twoSum(self , numbers: List[int], target: int) -> List[int]:
    # 1.暴力法--超时
       l=len(numbers)
       result=[]
       for i in range(l):
        for j in range(i,l):
            if i==j:continue
            if numbers[i]+numbers[j]==target:
                result.append(i+1)
                result.append(j+1)
                return result
    # 2.哈希表--key-value的方式,target减去遍历当前值再直接去找是否有key,若有则返回排序后的下标,若无则遍历下一个key
        l=len(numbers)
        hash={}
        for i in range(l):
            if target-numbers[i] not in hash.keys():
                hash[numbers[i]]=i
            else:
                return [hash[target-numbers[i]]+1,i+1]


http://www.kler.cn/a/147112.html

相关文章:

  • 创建vue3项目步骤
  • 英语中的副词和状语
  • 无人机动力系统测试-实测数据与CFD模拟仿真数据关联对比分析
  • SpringBoot多环境配置的实现
  • 蓝桥杯-顺子日期
  • wordpress使用相关
  • 五子棋游戏
  • 【Linux】bash 终端指令
  • pip install 使用清华镜像源
  • 相同JS代码,多次混淆加密能得到不同的结果吗?
  • C++之常用的拷贝和替换算法
  • 蓝桥杯day01——根据给定数字划分数组
  • 第二节HarmonyOS DevEco Studio创建项目以及界面认识
  • Android系统源码中,在手上没有源码的情况下,需要将编译好的二进制可执行文件放入系统中
  • Python基于机器学习模型LightGBM进行水电站流量入库预测项目源码+数据集+模型,含项目报告
  • 开源与闭源:数字时代大模型之辩
  • ArcGis如何用点连线?
  • 持续集成部署-k8s-高级调度-CronJob:定时任务的应用
  • linux的netstat命令和ss命令
  • 【Mysql】【DB】【sql】提高数据库搜索性能的经验
  • Nginx Openresty通过Lua+Redis 实现动态封禁IP
  • 好用的基于layui的免费开源后台模版layuimini
  • Windows系统下更新后自带的画图软件出现马赛克bug
  • Linux:通过VMWare,定制化Linux系统
  • 6.2 Windows驱动开发:内核枚举SSSDT表基址
  • 功率整流器的作用是什么?SURS8340T3G车规级功率整流器的介绍