题解 | #和为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; }