Leetcode—1.两数之和【简单】(unordered_map)

每日刷题(十七)

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友人在评论区讨论交流,只要我看到了,一定会回复,感谢您的支持,下期更精彩!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值