Как бесплатно (а)?

Я делаю leetocde. Первый вопрос Two Sum: https://leetcode.com/problems/two-sum/description/

Я представляю решение с кодом C:

/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target) {
    int *a = (int*)malloc(2*sizeof(int));
    for(int i = 0;i<numsSize;i++){
        for(int j = i+1;(j<numsSize && j != i);j++){
            if(nums[i] + nums[j] == target){
            a[0] = i;
            a[1] = j;
            return a;
            }
        }
    }
     return NULL;
}

Мое решение будет принято.

Полный код c:

/* my solution to Two Sum */

#include <stdio.h>
#include <stdlib.h>

#define TARGET 9


int* twoSum(int* nums, int numsSize, int target) {
    int *a = (int*)malloc(2*sizeof(int));
    for(int i = 0;i<numsSize;i++){
        for(int j = i+1;(j<numsSize && j != i);j++){
            if(nums[i] + nums[j] == target){
                a[0] = i;
                a[1] = j;
                return a;
            }
        }
    }
    return NULL;
}

int main()
{
    int n,target = TARGET;
    int a[]={2, 7, 11, 15};
//  int a[]={2,25,10,7,11,15,21,60};        // test data
    int *result = NULL;

    n = sizeof(a) / sizeof(a[0]);

    result = twoSum(a,n,target);

    if(result != NULL)
        printf("%d %d\n",result[0],result[1]);
    else
        printf("No elements that satisfy the condition\n");

    return 0;
}

/*
 * output:
 * 0 1
 */

Я запускаю команду:

gcc two-sum.c -o two-sum
./two-sum

Выводит: 0 1

Но я обнаружил, что в моем коде есть ошибка, из-за которой функция twoSum не может быть бесплатной.

Как это решить?

1 ответ

Решение

Дополнение имеет смысл только тогда, когда вы указываете, как долго ваш тип данных. Если это 4 бита, то для 0xf его 0x0, Если это 8 бит, то для 0xf его 0xf0,

Ваше представление -6 будет либо 0xfa, 0xfffa, 0xfffffffaили дольше, в зависимости от того, сколько байтов длиннее ваше значение.

Другие вопросы по тегам