标签:-- 比较 two sum span pre 第一个 return data cal
void*空类型指针,就好像暂时还没有确定类型,任何类型都可以赋给它。但是具体操作时一定要确定类型(如下,比较时先转Node)
cmp返回一定是int,有-1,0,1三种,如果是1则第一个数要放在第二个数后面,形参为const void*
qsort(数组名,数组长度,每个元素的size,比较函数)
给一个指针动态分配空间:类型* b = (类型*)malloc(sizeof(类型))
我的解法:先快排出序,再在O(n)内解开。
/** * Note: The returned array must be malloced, assume caller calls free(). */ typedef struct node{ int data; int index; }Node; Node array[1000010]; int cmp(const void *a, const void *b) { return (*(Node *)a).data > (*(Node *)b).data ? 1 : -1; } int* twoSum(int* nums, int numsSize, int target) { for(int i = 0; i < numsSize; i++){ array[i].data = nums[i]; array[i].index = i; } qsort(array, numsSize, sizeof(array[0]), cmp); int i = 0, j = numsSize-1; int *b=(int *)malloc(sizeof(int)*2); while(i < j){ if(array[i].data+array[j].data < target) i++; else if(array[i].data+array[j].data > target) j--; else { b[0] = array[i].index; b[1] = array[j].index; break; } } return b; }
标签:-- 比较 two sum span pre 第一个 return data cal
原文地址:https://www.cnblogs.com/Surprisezang/p/10193394.html