- 打卡第二天,从简单题做起。
c:暴力求解,时间复杂度O(n²)
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
for (int i = 0; i < numsSize; ++i) {
for (int j = i + 1; j < numsSize; ++j) {
if (nums[i] + nums[j] == target) {
int* ret = malloc(sizeof(int) * 2);
ret[0] = i, ret[1] = j;
*returnSize = 2;
return ret;
}
}
}
*returnSize = 0;
return NULL;
}
c++:利用哈希表快速找列表是否存在目标值,查找的时间复杂度为O(1),算法时间复杂度O(n).
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
//创建一个哈希表
unordered_map<int, int> hash;
for (int i = 0; i < nums.size(); ++i) {
//查找键值,若哈希表中已经存在该键值,就返回end()
auto it = hash.find(target - nums[i]);
if (it != hash.end()) {
//it->second返回对应键值对的值,即为另一个目标数的下标
return {it->second, i};
}
hash[nums[i]] = i;
}
return {};
}
};