【LeetCode 1】两数之和

1. 题目

两数之和

2. 分析

这道题有多种解法,逐个来看。

2.1 深搜版

首先可以用深搜来解,我们从数组集合中选取两个数,判断其和是不是target,如果是则满足要求,如果不是,继续选取。

2.2 循环版

深搜版的代码用在这题上,属实有点儿大材小用了。原因是,我们的搜索空间可以用for循环罗列出来,而不用费劲儿的用深搜。Leetcode 官方题解还给了一个对双重for循环优化的代码,优化的逻辑则是根据题意想出的。

2.3 哈希表版

刷了这道Leetcode后,我反思了一下自己的学习过程,感觉自己进入了旁门左道,一直在追求使用深搜、动态规划这种高逼格的代码,但是有些时候,简单的数据结构使用,就可以迅速降低问题复杂度。

3. 代码

3.1 深搜版

# 使用深搜的方法解决本题,但存在的问题是会导致超时,很多输入过不了,
# 那么就需要考虑其它的解决方法
class Solution:
    res = []
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        self.res = []
        cnt = 0
        tmp = []
        idx = 0 # 起始下标
        self.dfs(nums, cnt, tmp, idx, target)
        return self.res

    # 判断当前下标 = idx 的数
    def dfs(self, nums, cnt, tmp, idx, target):        
        if cnt == 2 and nums[tmp[0]] + nums[tmp[1]] == target:
            print(tmp)
            self.res = tmp[:]
            return 
        if idx >= len(nums):
            return 
        # 放idx
        tmp.append(idx)
        self.dfs(nums, cnt+1, tmp, idx+1, target)
        del tmp[-1]
                
        # 不放idx
        self.dfs(nums, cnt, tmp, idx+1, target)

3.2 循环版

这部分代码略去。


3.3 哈希表版

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # 这里只是定义了一个hash表,还没有做放入值的操作。
        # 亮点就是这个哈希表的值是边遍历边放入其中。
        hashtable = dict()        
        for i, num in enumerate(nums):
            if target - num in hashtable:
                return [hashtable[target - num], i]
			# 存入 nums[i] 的下标
            hashtable[nums[i]] = i 
        return []

相关推荐

  1. LeetCode 1. 之和

    2024-06-05 21:22:04       83 阅读
  2. leetcode 1之和

    2024-06-05 21:22:04       49 阅读
  3. LeetCode1之和

    2024-06-05 21:22:04       39 阅读
  4. Leetcode 1.之和

    2024-06-05 21:22:04       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-05 21:22:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-05 21:22:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-05 21:22:04       87 阅读
  4. Python语言-面向对象

    2024-06-05 21:22:04       96 阅读

热门阅读

  1. RUST运算符重载

    2024-06-05 21:22:04       26 阅读
  2. 【linux自动化实践】linux shell 脚本 替换某文本

    2024-06-05 21:22:04       30 阅读
  3. 数据结构学习笔记(6)--特殊矩阵的压缩存储

    2024-06-05 21:22:04       30 阅读
  4. 云计算和雾计算

    2024-06-05 21:22:04       28 阅读
  5. 【面试】JDK和JVM是什么关系?

    2024-06-05 21:22:04       31 阅读
  6. 使用 AlarmManager 结合广播接收器来实现定时检查

    2024-06-05 21:22:04       27 阅读
  7. WSL虚拟机的两种网络配置方式 NAT Mirrored

    2024-06-05 21:22:04       28 阅读
  8. Ubuntu 离线安装 gcc、g++、make 等依赖包

    2024-06-05 21:22:04       32 阅读
  9. 奇偶交换排序

    2024-06-05 21:22:04       30 阅读
  10. Windows10 安装 Lua详细教程

    2024-06-05 21:22:04       35 阅读
  11. 实验报告题目

    2024-06-05 21:22:04       29 阅读
  12. 09-进程和计划任务管理

    2024-06-05 21:22:04       20 阅读
  13. Android的刷机模式

    2024-06-05 21:22:04       29 阅读