在数组中寻找两个数之和等于目标数
程序员文章站
2022-12-08 20:06:44
本道题目我起初的想法是暴力寻找两个数之和,每次与目标数进行比对,这样的时间复杂度是O(n2)。 改进: 我使用散列表将数组元素散列存储,这样便可以对元素进行O(1)访问,从而实现在O(n)的时间复杂度解决该问题。 #include #include #incl ......
本道题目我起初的想法是暴力寻找两个数之和,每次与目标数进行比对,这样的时间复杂度是o(n2)。
改进:
我使用散列表将数组元素散列存储,这样便可以对元素进行o(1)访问,从而实现在o(n)的时间复杂度解决该问题。
#include <iostream> #include <cstdio> #include <vector> #include <map> using namespace std; vector<int> twosum(vector<int>& nums, int target) ; int main() { int vector_num, target ; cin>>vector_num; vector<int> nums(vector_num); for(int i = 0; i < vector_num; ++i) { cin >> nums.at(i); } cin>>target; vector<int> ans = twosum(nums,target); for(int i = 0;i<ans.size();++i) { cout<<ans.at(i)<<endl; } return 0; } vector<int> twosum(vector<int>& nums, int target) { vector<int> ans; map<int, int> hashmap; for (int i = 0; i < nums.size(); i++) { hashmap.insert(pair<int, int>(nums[i], i)); } for (int i = 0; i < nums.size(); i++) { int complement = target - nums[i]; map<int, int>::iterator iter; iter = hashmap.find(complement); if (iter != hashmap.end() && hashmap.at(complement) != i) { ans = {i, hashmap.at(complement) }; } } return ans; }
推荐阅读
-
在数组中寻找两个数之和等于目标数
-
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素
-
两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。...
-
c语言和Java语言实现,两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
leetcode:求两数之和,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
LeetCode1.两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,返回数组下标。假设每种输入只对应一个答案。但数组中同一个元素不能使用两遍
-
python实现给定一个数和数组,求数组中两数之和为给定的数
-
LeetCode [Python]1. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
在数组中寻找两个数之和等于目标数
-
python实现给定一个数和数组,求数组中两数之和为给定的数