LeetCode第一题两数之和
题目:
给定一个整数数组 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第一题两数之和相关推荐
- LeetCode第一题两数之和---JavaScript
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一 ...
- LeetCode刷题-两数之和(持续更新)
文章目录 LeetCode 1. Two Sum (两数之和) 题目描述 样例 解题思路一(暴力法) 解题思路二(使用map) 前言:最近业余时间,一直在看LeetCode上面的题,上面有许多好的解题 ...
- leetcode第一题两数相加
leetcode两数相加: 提示: 问题描述: int* twoSum(int* nums, int numsSize, int target, int* returnSize) {for (int ...
- 【leetcode 简单】第一题 两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...
- php算法两数之和 复杂度,每天一道leetcode算法题:两数之和-php版
我们先来看题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用 ...
- leetcode算法题--两数之和
题目地址:https://leetcode-cn.com/problems/two-sum/ vector<int> twoSum(vector<int>& nums, ...
- LeetCode题库第1题 两数之和
两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...
- leetcode系列--1.两数之和
leetcode 第1题 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输 ...
- LeetCode:1.两数之和
LeetCode:1.两数之和 第一次写题解,也第一次做leetcode,不妥之处还望海涵 一.暴力 //cpp class Solution {public:vector<int> tw ...
最新文章
- 设置input标签禁用_HTML option 标签
- go 17个字符串函数使用示例
- cad在哪里设置图幅大小_一看就懂!菜鸟也能快速入门CAD,关键掌握这4个诀窍...
- WebClient UI删除搜索条件的后台处理,以及max hit的处理逻辑
- 女友的前男友教我该怎么照顾她......
- Java 10 –局部变量类型推断
- 【渝粤教育】电大中专学习指南 (3)作业 题库
- java 设计作业——简单计算器
- 王道 —— 操作系统的发展与分类
- LINQ to XML 编程基础
- 一些iphone开发的资料
- adduser useradd userdel /etc/password【原创】
- 干货!Python与MySQL数据库的交互实战
- 转载JMF多媒体doc教程
- SHELL(bash)脚本编程四:其他扩展
- php打印当前页面隐藏页眉,javascript实现window.print()去除页眉页脚_javascript技巧
- ones刻录软件怎么用
- 遥感影像几何校正方法
- 最新易支付多功能系统源码+全开源
- 如何下载B站视频(方法持续更新)