leetcode 167两数之和

leetcode刷题两数之和

给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
在这里插入图片描述
问题分析:由于数组有序排列,因此可想到渐进求和,设置left和right进行下标的移动,首先从第1个和第二个位置开始,两数相加求和,如果相加小于目标值则将right左移,如果相加大于目标值,则将left右移,直到得出相应结果,同时输出下标left和right,若一个都没有则返回-1,代码如下:

int* twpSum(int* numbers,int numberSize,int target,int *returnSize){
	int *ret =(int*)malloc(sizeof(int)*2);
	*returnSize=2;
	int left=0,right =numberSize -1;
	while(left<right){
	int sum=numbers[left]+numbers[right];
	if(sum == target){
		ret[0]=left+1,ret[1]=right+1;
		return ret;
 	 else if(sum<target){
  		++left;
  		}
  		else{
  		--right;
        }
    }
    ret[0] = -1, ret[1] = -1;
    return ret;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Curious*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值