<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

今天的练习就止于此吧~


相关文章
|
存储 监控 算法
解析公司屏幕监控软件中 C# 字典算法的数据管理效能与优化策略
数字化办公的时代背景下,企业为维护信息安全并提升管理效能,公司屏幕监控软件的应用日益普及。此软件犹如企业网络的 “数字卫士”,持续记录员工电脑屏幕的操作动态。然而,伴随数据量的持续增长,如何高效管理这些监控数据成为关键议题。C# 中的字典(Dictionary)数据结构,以其独特的键值对存储模式和高效的操作性能,为公司屏幕监控软件的数据管理提供了有力支持。下文将深入探究其原理与应用。
477 4
|
索引 容器
两数之和(每天刷力扣hot100系列)
本题要求在数组中找出两数之和等于目标值的下标。解法一为暴力枚举,时间复杂度O(N²),空间复杂度O(1);解法二利用哈希表,将查找时间降为O(1),总时间复杂度O(N),空间复杂度O(N),实现以空间换时间的优化。
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
656 2
|
C++
Leetcode第一题(两数之和)
这篇文章介绍了解决LeetCode第一题“两数之和”的两种方法:暴力法和哈希表法,并提供了相应的C++代码实现。
590 0
Leetcode第一题(两数之和)
|
存储 索引
LeetCode------两数之和(3)【数组】
这篇文章介绍了LeetCode上的"两数之和"问题,提供了两种解法:一种是暴力求解法,通过双层循环遍历数组元素对查找两数之和为目标值的索引,时间复杂度为O(n^2);另一种是使用HashMap优化,通过存储元素值和索引,时间复杂度降低到O(n)。
LeetCode------两数之和(3)【数组】
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
545 1
|
Python
【Leetcode刷题Python】LeetCode 478. 在圆内随机生成点
本文介绍了LeetCode 478题的解法,题目要求在给定圆的半径和圆心位置的情况下实现在圆内均匀随机生成点的功能,并提供了Python的实现代码。
361 1
|
算法 Python
【Leetcode刷题Python】73. 矩阵置零
本文介绍了LeetCode第73题的解法,题目要求在给定矩阵中将所有值为0的元素所在的行和列全部置为0,并提供了一种原地算法的Python实现。
578 0
【Leetcode刷题Python】73. 矩阵置零
|
存储 C++ 容器
【LeetCode 13】1.两数之和
【LeetCode 13】1.两数之和
232 0
LeetCode第1题两数之和
该文章介绍了 LeetCode 第 1 题两数之和的解法,通过使用 HashMap 来记录数组元素及其下标,以 O(n)的时间复杂度解决问题。

热门文章

最新文章

推荐镜像

更多