题解 | #两数之和#我写错了,不过感觉删了很可惜

两数之和

https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f

写到最后我才发现我已经把原数组搞乱了,不过开头复制原数组还可以写,不过就太麻烦了;

我一开始没有想到哈希表,我先使用快排,再用二分查找完成,结果返回的下标是快排完的下标,最后我才注意到,戒之!

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param numbers int整型一维数组 
 * @param numbersLen int numbers数组长度
 * @param target int整型 
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
#include <stdlib.h>
int cmp(const void *e1,const void *e2){
    return *(int *)e1 - *(int *)e2;
}

int bisearch(int *numbers ,int target ,int numbersLen){
    int head = 0;
    int tail = numbersLen - 1;
    int mid = 0;
    while(head <= tail){
        mid = (head + tail) / 2;
        if(numbers[mid] == target)
            return mid;
        else if(numbers[mid] > target)
            tail = mid - 1;
        else if(numbers[mid] < target)
            head = mid + 1; 
    }
    return -1;
}

int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {
    int *res = (int *)malloc(sizeof(int)*2);
    int temp = 0;
    qsort(numbers, numbersLen, sizeof(int), cmp);
    for(int i = 0;i < numbersLen;i++){
        temp = bisearch(numbers, target-numbers[i], numbersLen);
        if((temp > 0)&&(temp != i)){
            res[0] = i+1;
            res[1] = temp +1;
            *returnSize = 2;
            return res;
        }
    }
    *returnSize = 2;
    return NULL;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 15:43
mamazi00:领导你好+小作文。就算给你涨薪,其实也是待不久了
点赞 评论 收藏
分享
10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务