给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
、、、、、、、、、、、、、、、、、、、、、题目来源 LeetCode。
c++复杂版(输出只要符合返回值类型即可,格式题目有其他函数进行保证)练习了vector的一些函数的使用
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int numberLen = nums.size(); vector<int> arr; if(numberLen > 1) { for(int i =0 ; i<numberLen ; i++) { for(int j = i+1; j<numberLen ;j++) { // if(nums[i]>target || nums[j]>target) // { //这里的判断不能写,因为有负数+大整数的情况 // } if((nums[i]+ nums[j]) == target) { arr.push_back(i); arr.push_back(j); return arr; } } } } // vector <int>::iterator iter=arr.begin(); // for ( ;iter!=arr.end();) // { // iter=arr.erase(iter);//相对于clear会多耗时100多毫秒 // } arr.clear(); return arr; } };
但是这个复杂度是O(N2);
官方建议哈希表进行查找