1#Two Sum(qsort用法)

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;
}
原文地址:https://www.cnblogs.com/Surprisezang/p/10193394.html