欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

给定一个整数,在一个整数数组中找到两个下标不同的元素,其和为给定的整数

程序员文章站 2024-03-15 20:25:24
...
#include<stdio.h>
#include<stdlib.h>
#include"uthash.h"

typedef struct hash_map
{
    int key;
    int value;
    UT_hash_handle hh;
} HashMap;

HashMap* map;

HashMap* find(int key)
{
    HashMap* temp = NULL;

    HASH_FIND_INT(map, &key, temp);

    return temp;      
}

void add(int key, int value)
{
    HashMap* temp = find(key);

    if (!temp)
    {
        temp = (HashMap*)calloc(1, sizeof(HashMap));
        temp->key = key;

        HASH_ADD_INT(map, key, temp);
    }

    temp->value = value;   
}

int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
    map = NULL;
    int* rNums = NULL;
    *returnSize = 0;   
    HashMap* temp = NULL;
    int key = 0;

    for (int i = 0; i < numsSize; i++)
    {
        temp = find(target - nums[i]);

        if (temp)
        {
            *returnSize = 2;
            rNums = (int*)calloc(*returnSize, sizeof(int));
            rNums[0] = temp->value;
            rNums[1] = i;
            break;
        }

        add(nums[i], i);       
    }
    return rNums;
}

int main(void)
{
    int nums[4] = { 11, 2, 15, 7 };
    int* rSize = (int*)calloc(1, sizeof(int));
    int* rNums = twoSum(nums, 4, 9, rSize);

    if (*rSize)
        printf("[%d, %d]\n", rNums[0], rNums[1]);
    else
        printf("[]\n");

    return 0;
    
}

相关标签: C语言