Как бесплатно (а)?
Я делаю 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
или дольше, в зависимости от того, сколько байтов длиннее ваше значение.