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

算法1--两束求和

题目描述

在这里插入图片描述

解题思路

先说一种很容易想到的暴力解法

暴力解法的思路很简单,就是遍历数组,对于每一个元素,都去遍历数组中剩下的元素,判断是否有两个元素的和等于目标值,如果有,就返回这两个元素的下标。

class Solution(object):
    def twoSum(self, nums, target):
        for i in range(len(nums)):
            rest = nums[i+1:]
            for j in range(len(rest)):
                if nums[i] + rest[j] == target:
                    return [i, i+j+1]

尝试提交,通过,时间复杂度为O(n^2)

在这里插入图片描述

显然上面的方法不够优雅,再说一种优雅的解法

暴力解法是把每一个数都遍历,然后返回下标,但是这个遍历的过程显然是太过于耗时了,那么我们能不能使用一个数据结构把已经遍历过的数据存储起来,然后往后遍历的时候,求和的时候直接去除先前数据的下标呢?

有的,有的兄弟!我们可以使用字典来存储,当然,你也可以叫他哈希表(HashMap),其实在Python中,这就是字典,为什么叫他哈希表呢,这是因为这个存储思想就是基于操作系统中哈希存储的。

那么我们可以这样来操作:我们遍历所有的数据,以数据的值为键,以它的下标为值,存储到哈希表中,然后每次都判断目标的值和当前所遍历的值的差是否在哈希表中,如果在,直接返回当前数的下标和哈希表中数的下标,否则继续。

开始手搓!

class Solution(object):
    def twoSum(self, nums, target):
        num_dict = {}
        for i in range(len(nums)):
            if target - nums[i] in num_dict.keys():
                return [i, num_dict[target-nums[i]]]
            else:
                num_dict[nums[i]] = i

尝试提交,通过,时间复杂度为O(n)
在这里插入图片描述

总结

可以看到,执行时间从2172ms降到了3ms,效率提升了700倍!自然就变得优雅了。

相关文章:

  • 【电源专题】锂电池保护IC/锂电池电压监测IC/锂电池电量计IC/锂电池充电控制IC常见封装一览表
  • MySQL连接较慢原因分析及解决措施
  • 基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法
  • 卷积神经网络 - 梯度和反向传播算法
  • 六十天前端强化训练之第二十五天之组件生命周期大师级详解(Vue3 Composition API 版)
  • 2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第二场次题目:容器云平台部署与运维
  • spring.datasource.filters = stat,wall配置解释
  • 深入解析 Java Stream API:从 List 到 Map 的优雅转换!!!
  • 计算机基础:编码03,根据十进制数,求其原码
  • 工业数据驱动智能维护的深度调研报告
  • SystemVerilog 数据类型
  • DeepSeek的崛起:2025新春国产AI模型的全球影响力
  • C# 集合(Collection)详解以及区别
  • 【C++网络编程】第2篇:简单的TCP服务器与客户端
  • 【华为Pura先锋盛典】华为Pura X“阔折叠”手机发布:首次全面搭载HarmonyOS 5
  • 常用的 MyBatis 标签及其作用
  • Java EE(14)——网络原理——UDPTCP数据报的结构
  • C语言程序设计第四版-课本习题(第六章-循环控制结构)
  • 星越L_陡坡缓降使用讲解
  • 双系统下Linux挂载Windows硬盘失败
  • 解放军仪仗分队参加白俄罗斯纪念苏联伟大卫国战争胜利80周年阅兵活动
  • 巴西总统卢拉将访华
  • 东洋学人|滨田青陵:近代日本考古学第一人
  • 早期投资人蜂巧资本清仓泡泡玛特套现超22亿港元,称基金即将到期
  • 上海明后天将迎强风大雨,陆地最大阵风7~9级
  • 第四轮伊美核问题谈判预计5月11日举行