zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    HDU1864--01背包
    HDU4508--完全背包
    HDU5410--01背包+完全背包
    HDU1284--完全背包
    HDU1248--完全背包
    HDU2191--多重背包(二进制分解+01背包)
    HDU2186--水
    PAT乙级--1003
    51Nod--1006 lcs
    51Nod--1008
  • 原文地址:https://www.cnblogs.com/Surprisezang/p/10193394.html
Copyright © 2011-2022 走看看