走迷宫双人版,qq餐厅刷钱器,林俊杰给别人写的歌
本道题目我起初的想法是暴力寻找两个数之和,每次与目标数进行比对,这样的时间复杂度是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; }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论