题目:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案

 循环:

我第一时间的想法是写两个循环,遍历数组然后求和,去找和target值相等的结果然后输出。代码如下:

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

但这样写时间的复杂度不符合题目中的小于O(n2)所以在此版代码的基础上需要做出改进。我们知道第一版代码的求和res=nums[i]+nums[j]是在内部循环里,这就意味着需要遍历完两次数组,然后把得出的所有值按遍历顺序一个一个求和之后比较才能得出结果。那样做太费时间这时我们可以换种方式,拿已知和减第一次遍历的数,然后拿所求值跟二次遍历数值比较,这样所用时间就会大大节省,代码如下:

循环改进:

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

下图是两次算法的时间对比,下面是第一种,上面是第二种 。

但这两种解法毕竟不是最优解,花的时间太长~~

这道题就像买东西,我要喜之郎果冻,我就直接去喜之郎果冻区找啊,我难道一进门就开始一个货架子一个货架子看嘛吗?这种快捷查找就让我想到最近学的哈希算法。首先运用字典写出一个简单的索引表,然后用目标值减去其中一个值,用所得结果去索引表里查,找到就直接输出,这样就省了一次遍历数组的时间。(不是严格意义上的哈希表,哪位大佬知道更好的可以教我谢谢!)

哈希法

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hashtable = {}for num, val in enumerate(nums):other = target - valif other in hashtable:return [hashtable[other], num]hashtable[val] = numreturn None

注意:hashtable[val]=num不要写在if上。由于我们知道哈希表将这次查找所用的时间缩小到O(1)这样就缩短了很多时间。那么我们此次算法所用的时间复杂度为O(n)。符合题目要求。而他所用的空间复杂度就取决于存储的数量了

LeetCode第一题两数之和相关推荐

  1. LeetCode第一题两数之和---JavaScript

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一 ...

  2. LeetCode刷题-两数之和(持续更新)

    文章目录 LeetCode 1. Two Sum (两数之和) 题目描述 样例 解题思路一(暴力法) 解题思路二(使用map) 前言:最近业余时间,一直在看LeetCode上面的题,上面有许多好的解题 ...

  3. leetcode第一题两数相加

    leetcode两数相加: 提示: 问题描述: int* twoSum(int* nums, int numsSize, int target, int* returnSize) {for (int ...

  4. 【leetcode 简单】第一题 两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...

  5. php算法两数之和 复杂度,每天一道leetcode算法题:两数之和-php版

    我们先来看题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用 ...

  6. leetcode算法题--两数之和

    题目地址:https://leetcode-cn.com/problems/two-sum/ vector<int> twoSum(vector<int>& nums, ...

  7. LeetCode题库第1题 两数之和

    两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...

  8. leetcode系列--1.两数之和

    leetcode 第1题 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输 ...

  9. LeetCode:1.两数之和

    LeetCode:1.两数之和 第一次写题解,也第一次做leetcode,不妥之处还望海涵 一.暴力 //cpp class Solution {public:vector<int> tw ...

最新文章

  1. 设置input标签禁用_HTML option 标签
  2. go 17个字符串函数使用示例
  3. cad在哪里设置图幅大小_一看就懂!菜鸟也能快速入门CAD,关键掌握这4个诀窍...
  4. WebClient UI删除搜索条件的后台处理,以及max hit的处理逻辑
  5. 女友的前男友教我该怎么照顾她......
  6. Java 10 –局部变量类型推断
  7. 【渝粤教育】电大中专学习指南 (3)作业 题库
  8. java 设计作业——简单计算器
  9. 王道 —— 操作系统的发展与分类
  10. LINQ to XML 编程基础
  11. 一些iphone开发的资料
  12. adduser useradd userdel /etc/password【原创】
  13. 干货!Python与MySQL数据库的交互实战
  14. 转载JMF多媒体doc教程
  15. SHELL(bash)脚本编程四:其他扩展
  16. php打印当前页面隐藏页眉,javascript实现window.print()去除页眉页脚_javascript技巧
  17. ones刻录软件怎么用
  18. 遥感影像几何校正方法
  19. 最新易支付多功能系统源码+全开源
  20. 如何下载B站视频(方法持续更新)

热门文章

  1. 007-安装百度云,搜狗输入法,播放器
  2. 论ICT技术与数据中心的关系
  3. 安能物流敲定上市发行价:取发售区间下限,工作态度有待改善
  4. 傻白探索Chiplet,一些相关术语和问题记录(二)
  5. python remove pop
  6. 孩子做作业用计算机,小学五年级写作业让用计算机吗
  7. 使用chrome添加网页到桌面
  8. 水面模拟--波动方程
  9. php基础巩固,PHP基础巩固视频教程下载
  10. 中国象棋对弈系统java的程序包谁有?