每日刷题(十七)
Leetcode—1.两数之和
这个题是个简单题,但我这里先用C语言实现一下
#include<stdio.h>
void Solution(int nums[], int target)
{
int i = 0, j, t;
while(nums[i] != '\0')
i++;
t = i;
for(i = 0; i < t; i++)
for(j = i + 1; j < t; j++)
if(nums[i] + nums[j] == target)
printf("%d, %d\n", i, j);
}
int main()
{
int nums[] = {2, 7, 11, 15}, target = 9;
Solution(nums,target);
return 0;
}
但是编译却出现问题
我在自己的编译器上都运行得很好,后来我发现原来平台是有格式要求的,就得按他给的这个
这上面注明了数组要被malloc一下,名称自拟
以下是我的暴力破解法C代码,可以参考一下
暴力枚举实现代码
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int *result;
*returnSize = 2;
result = (int *)malloc(sizeof(int) * 2);
int i, j;
for(i = 0; i < numsSize - 1; i++)
for(j = i + 1; j < numsSize; j++)
if(nums[i] + nums[j] == target)
{
result[0] = i;
result[1] = j;
}
return result;
}
以上是运行成功的情况
当然,这里我想给你们提个醒,如果没有意识到*returnSize的重要性而没有初始化就会发生以下堆缓冲区溢出
哈希表实现代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> arr;
for(int i = 0; i < nums.size(); i++) {
auto t = arr.find(target - nums[i]);
if(t != arr.end()) {
return {t->second, i};
}
arr[nums[i]] = i;
}
return{};
}
};
运行结果
2024.8.13重温一遍
unordered_mapC++实现代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> numsToIndex;
for(int i = 0; i < nums.size(); i++) {
if(const auto it = numsToIndex.find(target - nums[i]); it != numsToIndex.cend()) {
return {it->second, i};
}
numsToIndex[nums[i]] = i;
}
return {};
}
};
运行结果
如果喜欢我的文章,请记得三连哦,点赞关注转发,欢迎各位志同道合的IT友人在评论区讨论交流,只要我看到了,一定会回复,感谢您的支持,下期更精彩!!!