twoSum,利用双指针返回下标
来源:互联网 发布:Mac字幕太小 编辑:程序博客网 时间:2024/05/18 07:39
给一个int型数组无序,从数组中选出两数字,使得这两数字之和为target,将这两数字的下标作为数组返回。
利用双指针查找数组元素,并返回元素下标。
#include<stdio.h>
#include<malloc.h>//在堆中分配内存#include<stdlib.h>//排序所需头文件
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
指针函数,需要参数为数组首地址,数组大小,目标值。
int* twoSum(int* nums,int numsSize,int target)
{
int *pr=nums;
int low=0;
int high=numsSize-1;//创建双指针,一个指向数组首地址,另一个指向数组最后一个元素
int i;
int *copy=(int*)malloc(sizeof(int)*numsSize);
for(i=0;i<numsSize;i++)//最后返回的是原数组的下标,先对数组进行复制
copy[i]=nums[i];
qsort(nums,numsSize,sizeof(int),comp);//调用qsort排序
int *a=(int*)malloc(sizeof(int)*2);//这里不能直接int a[2],int a[2]的空间将分配在栈中,函数结束后,空间被释放,返回值不会被继承。利用malloc函数在堆中分配内存
while(*(pr+low)+*(pr+high)!=target)
{
if(*(pr+low)+*(pr+high)<target)
low++;
if(*(pr+low)+*(pr+high)>target)
high--;
}//如果和小于target,low++,和增大,反之high--,和减小,因为一定会有target出现,不用判断不存在的情况。
for(i=0;i<numsSize;i++)
{
if(copy[i]==*(pr+low))
a[0]=i;
if(copy[i]==*(pr+high))
a[1]=i;
}查找原数组的下标
return a;
}
int main()
{
int nums[100];
int target;
int numsSize;
scanf("%d %d",&target,&numsSize);
int i;
for(i=0;i<numsSize;i++)
{
scanf("%d",&nums[i]);
}
int *p=twoSum(nums,numsSize,target);//接受返回值
printf("%d %d",*p,*(p+1));
return 0;
}
1 1
- twoSum,利用双指针返回下标
- 指针下标
- 双指针(下标)的应用
- MATLAB利用双下标提取矩阵元素
- c++学习--利用指针返回多个值
- 利用函数 分配空间,返回指针
- 指针的下标运算
- 指针与下标计算
- twoSum
- TwoSum
- TwoSum
- TwoSum
- twoSum
- TwoSum
- TwoSum
- TwoSum
- TwoSum
- TwoSum
- leftPad字符补全
- 自己的思考缺陷与梳理修正
- java bitmap 实现
- Scala XML处理
- centos7安装VirtualBox虚拟机
- twoSum,利用双指针返回下标
- AngularJS Digest 过程解析
- opencv 金字塔图像分割
- 如何让中间层MIDAS/DATASNAP支持大量的并发用户并且控制连接数量
- JAVA 内部类
- 构建乘积数组
- Activity Recognition行为识别
- iOS开发系列--数据存取
- jsp与javaBean