题解 | #和为S的两个数字#

和为S的两个数字

https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @param arrayLen int array数组长度
 * @param sum int整型 
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
#include <stdlib.h>
int* FindNumbersWithSum(int* array, int arrayLen, int sum, int* returnSize ) {
    // write code here
    int l=0, r=arrayLen-1;                          //定义左右指针
    int* ret = (int*)malloc(sizeof(int)*2);   //为返回数组申请空间
    while(l<r){     //左右指针不相交则可以继续循环
        if(array[l] > sum){     //剪枝,左指针大于目标值,退出
            break;
        }
        if(array[l]+array[r] > sum){        //左右指针和大于目标值,移动右指针
            r--;
        }else if(array[l]+array[r] < sum){  //小于,移动左指针
            l++;
        }else{                              //相等
            *returnSize = 2;
            ret[0] = array[l], ret[1] = array[r];
            return ret;
        }
    }
    //找不到和为目标值,返回空
    *returnSize = 0;
    return NULL;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务