<LeetCode天梯>Day012 两数之和(暴力求解+枚举字典+哈希) | 初级算法 | Python

简介: <LeetCode天梯>Day012 两数之和(暴力求解+枚举字典+哈希) | 初级算法 | Python

以下为我的天梯积分规则:


每日至少一题:一题积分+10分

若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)

若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)


初始分为100分

若差一天没做题,则扣积分-10分(周六、周日除外注:休息)

坚持!!!


初级算法

刷题目录

数组


image.png

image.png

题干

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。


你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。


你可以按任意顺序返回答案。


示例1:


输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。


示例2:


输入:nums = [3,2,4], target = 6

输出:[1,2]


示例3:


输入:nums = [3,3], target = 6

输出:[0,1]


遍历暴力求解

分析:


从数组nums中提取出两个数,之和为target的值,那么说就不会存在相同的多个数会是的和为target,我们先用最能想到的遍历相加判断求解。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        re = []
        for i in range(n):
            for j in range(i+1, n):
                if nums[i]+nums[j] == target:
                    return [i,j]

超级慢,噗~铺盖了

image.png

效果很不好,我们再继续优化优化~

枚举逆向求解

分析:

我们利用字典可以枚举数组,得到其数值和索引号,然后再由target减去当前值,得到的值判断是否存在于数组中

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
  records = dict()
          for idx , val in enumerate(nums):
              if target - val not in records:
                  records[val] = idx
              else:
                  return [records[target - val], idx]

这次的效果就比较好了,比较复杂度降低了,速率和内存消耗都提高了不少

image.png

哈希

分析:

也是创建一个字典,然后枚举输出

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
  hashmap={}
          for ind,num in enumerate(nums):
              hashmap[num] = ind
          for i,num in enumerate(nums):
              j = hashmap.get(target - num)
              if j is not None and i!=j:
                  return [i,j]

和上面的枚举法效果差不多,应该算是很快的了,但是脚本语言还是那德行,哎~ε=(´ο`*)))唉

image.png

今天的练习就止于此吧~


相关文章
|
24天前
|
索引 容器
两数之和(每天刷力扣hot100系列)
本题要求在数组中找出两数之和等于目标值的下标。解法一为暴力枚举,时间复杂度O(N²),空间复杂度O(1);解法二利用哈希表,将查找时间降为O(1),总时间复杂度O(N),空间复杂度O(N),实现以空间换时间的优化。
|
8天前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
5月前
|
存储 监控 算法
内网监控桌面与 PHP 哈希算法:从数据追踪到行为审计的技术解析
本文探讨了内网监控桌面系统的技术需求与数据结构选型,重点分析了哈希算法在企业内网安全管理中的应用。通过PHP语言实现的SHA-256算法,可有效支持软件准入控制、数据传输审计及操作日志存证等功能。文章还介绍了性能优化策略(如分块哈希计算和并行处理)与安全增强措施(如盐值强化和动态更新),并展望了哈希算法在图像处理、网络流量分析等领域的扩展应用。最终强调了构建完整内网安全闭环的重要性,为企业数字资产保护提供技术支撑。
149 2
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
207 3
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
119 0
|
10月前
|
算法 安全
散列值使用相同的哈希算法
当使用相同的哈希算法对相同的数据进行散列时,所产生的散列值(也称为哈希值或摘要)总是相同的。这是因为哈希算法是一种确定性的函数,它对于给定的输入将始终产生相同的输出。 例如,如果你用SHA-256算法对字符串"hello world"进行哈希处理,无论何时何地,只要输入是完全一样的字符串,你都会得到相同的160位(40个十六进制字符)的SHA-256散列值。 但是,需要注意的是,即使是输入数据的微小变化也会导致产生的散列值完全不同。此外,不同的哈希算法(如MD5、SHA-1、SHA-256等)会对相同的数据产生不同的散列值。 哈希算法的一个关键特性是它们的“雪崩效应”,即输入中的一点小小
208 4
|
11月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
251 4
|
存储 算法 C#
C#哈希查找算法
C#哈希查找算法
103 1
|
C++
Leetcode第一题(两数之和)
这篇文章介绍了解决LeetCode第一题“两数之和”的两种方法:暴力法和哈希表法,并提供了相应的C++代码实现。
249 0
Leetcode第一题(两数之和)
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
202 1
测试工程师的技能升级:LeetCode算法挑战与职业成长

推荐镜像

更多