leetcode 167 两数之和

解法1:
暴力枚举,虽然过了,但是时间复杂度很高

int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
    int*arr=(int*)malloc(sizeof(int)*2);
    *returnSize=2;
    int flag=0;
    for(int i=0;i<numbersSize-1;i++){
        arr[0]=i+1;
        for(int j=i+1;j<numbersSize;j++){
            if(numbers[i]+numbers[j]==target){
                arr[1]=j+1;
                flag=1;
                break;
            }
        }
        if(flag)
            break;
    }
    return arr;
}

解法2:
因为数组已排序,所以可以使用一个指针指前一个指后,通过和的大小可判断需要对前后指针如何进行操作。

int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
    int i=0,j=numbersSize-1;
    *returnSize=2;
    while(i<j){
        if(numbers[i]+numbers[j]==target)
            break;
        else if(numbers[i]+numbers[j]<target)
            i++;
        else j--;
    }
    int*arr=(int*)malloc(sizeof(int)*2);
    arr[0]=i+1;
    arr[1]=j+1;
    return arr;
}
leetcode 167 两数之和leetcode 167 两数之和 带带大程序员 发布了8 篇原创文章 · 获赞 0 · 访问量 285 私信 关注
上一篇:oracle 11.2.0.4 rac 打补丁


下一篇:javascript 一些需要知道的东西