I'm Xiao Zhang , Determined to use the most concise code to do the most efficient expression
The following is my personal solution , Each problem includes all solutions as much as possible , And achieve the optimal solution , Welcome to collect ! Leaving a message. !
Portal ——>Leecode Big factory hot topic 100 Tao series problem solution
Given an array of integers nums And an integer target value target, Please find... In the array And is the target value target the Two Integers , And return their array subscripts .
You can assume that each input corresponds to only one answer . however , The same element in the array cannot be repeated in the answer .
You can return the answers in any order .
Example 1:
Input :nums = [2,7,11,15], target = 9
Output :[0,1]
explain : because nums[0] + nums[1] == 9 , return [0, 1] .
Example 2:
Input :nums = [3,2,4], target = 6
Output :[1,2]
Example 3:
Input :nums = [3,3], target = 6
Output :[0,1]
Tips :
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
There will only be one valid answer
Advanced : You can come up with a time complexity less than O(n2) The algorithm of ?
solution 1: violence
Time complexity O(n²), Spatial complexity O(1)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
for(int i = 0; i < nums.size(); i++) {
for(int j = i + 1; j < nums.size(); j++) {
if(nums[i] + nums[j] == target) {
res.push_back(i);
res.push_back(j);
goto loop;
}
}
}
loop:;
return res;
}
};
solution 2:hash surface
Time complexity O(n), Spatial complexity O(n)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int>um;
for(int i = 0; i < nums.size(); i++) {
auto it = um.find(target - nums[i]);
if(it != um.end()) {
return {
it->second, i};
}
um[nums[i]] = i;
}
return {
};
}
};