给定整数数组找出两数之和为目标值
怎么理解时间复杂度和空间复杂度?
时间复杂度:指算法语句的执行次数。
空间复杂度:就是一个算法在运行过程中临时占用的存储空间大小,换句话说就是被创建次数最多的变量,它被创建了多少次,那么这个算法的空间复杂度就是多少。有个规律,如果算法语句中就有创建对象,那么这个算法的时间复杂度和空间复杂度一般一致,很好理解,算法语句被执行了多少次就创建了多少对象。
题目要求
原题链接:两数之和
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出和为目标值 target
的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
1 | class Solution { |
示例 1:
1 | 输入:nums = [2,7,11,15], target = 9 |
示例 2:
1 | 输入:nums = [3,2,4], target = 6 |
示例 3:
1 | 输入:nums = [3,3], target = 6 |
题解
方法一:暴力枚举
直接 双层for循环
暴力枚举,唯一需要注意的是,内层循环是从外层往后开始遍历的,即外层循环从 i=0 的下标开始,内层循环就需要 i下标
往后一位,从 i+1
开始,用时大约 58 ms
1 | class Solution { |
方法二:哈希表
方法一慢在哪里了呢,当我们确定了外层循环的值后 nums[i]
,我们需要通过遍历的方法确定是否存在对应的那个值,满足 nums[i]+nums[j]=target
,时间消耗在了这里
那么改进的方法就是通过哈希表来优化,nums[i]
确定的情况下,到底有没有那个满足要求的nums[j]
,即 target - nums[i]
是否存在
1 | /** |
本文采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ShiGuang
评论