Desc:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
if ((nums == NULL) && (returnSize == NULL)) {
return NULL;
}
if (nums == NULL) {
*returnSize = 0;
return NULL;
}
if (returnSize == NULL) {
return NULL;
}
if (numsSize == 0) {
*returnSize = 0;
return NULL;
}
int *ret_array = (int*)malloc(sizeof(int) * 2);
if (ret_array == NULL) {
*returnSize = 0;
return NULL;
}
int first = -1;
int last = -1;
int i = 0;
int j = 0;
int hit = 0;
for (i = 0; i < numsSize - 1; i++) {
if (nums[i] <= target) {
if (first == -1) {
first = i;
for (j = i + 1; j < numsSize; j++) {
if ((nums[j] + nums[first]) == target) {
last = j;
hit = 1;
break;
}
}
if (hit == 1) {
break;
}
first = -1;
last = -1;
}
}
}
if (hit == 1) {
ret_array[0] = first;
ret_array[1] = last;
*returnSize = sizeof(int) * 2;
return ret_array;
}
free(ret_array);
ret_array = NULL;
*returnSize = 0;
return NULL;
}
近期评论