#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int * twoSum(int * nums, int numsSize, int target, int* returnSize){
int i, j;
int *returned = calloc(2, sizeof(int));
if (!returned) {
*returnSize = 0;
return NULL;
}
for (i = 0; i < numsSize - 1; i++) {
for (j = i + 1; j < numsSize; j++) {
if (nums[i] + nums[j] == target) {
returned[0] = i;
returned[1] = j;
*returnSize = 2;
return returned;
}
}
}
*returnSize = 0;
return NULL;
}
int* twoSum2(int* nums, int numsSize, int target, int* returnSize){
int *returned = calloc(2, sizeof(int));
if (!returned) {
*returnSize = 0;
return NULL;
}
int p1 = 0;
int p2 = 1;
while (1) {
if (p2 >= numsSize) {
p1 ++;
if (p1 > numsSize) {
break;
}
p2 = p1 + 1;
continue;
}
int value1 = *(nums + p1);
int value2 = *(nums + p2);
if (value1 + value2 == target) {
returned[0] = p1;
returned[1] = p2;
*returnSize = 2;
return returned;
}
p2++;
}
return NULL;
}
int* twoSum3(int* nums, int numsSize, int target, int* returnSize){
int *p = (int *)malloc(sizeof(int) * 2);
for (int i = 0;i < numsSize - 1; i++)
for (int j = i + 1; j < numsSize; j++)
if (*(nums + i) + *(nums + j) == target) {
*p = i;
*(p + 1) = j;
goto lable;
}
lable: {
*returnSize = 2;
return p;
}
}
void ToolPrintRunTime(clock_t start, clock_t end) {
double cost_time = (double)(end - start) / CLOCKS_PER_SEC;
printf("\n代码的执行时间为%f毫秒\n", cost_time);
}
void ToolPrintArray(int *array, int length) {
printf("\n[");
int lastIndex = length - 1;
for (int i = 0; i < length; i++) {
printf("%d", array[i]);
if (i < lastIndex) {
printf(", ");
}
}
printf("]\n");
}
int main() {
int nums[] = {2, 7, 1, 0, 11, 15};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int target = 2;
int * returnSize = calloc(2, sizeof(int));
ToolPrintArray(nums, numsSize);
printf("target=%d", target);
printf("\n-------\n");
clock_t start, end;
start = clock();
int * returned = twoSum3(nums, numsSize, target, returnSize);
end = clock();
ToolPrintRunTime(start, end);
int length = *returnSize;
printf("length=%d", length);
ToolPrintArray(returned, length);
}