两数之和C语言和JAVA版本的双指针解法
力扣链接:https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof/description/
题目描述:
题意:在一个数组中找到两个数之和为target,并以数组形式返回两个数.
例子:
思路:创建双指针,判断最小值和最大值的和与target的结果,根据结果进行更改双指针.
情况如下:
1.和 < target,证明左侧下标值 + 小于最大的值不可能等于target,所以需要直接改变left.
2.和 > target,证明最大值加右侧任意值都必然大于target,所以改变right
3.和 == target,返回下标值
解题步骤:
1.创建指针
2.循环判断指针与target大小情况
3.循环截止,证明不存在,返回一个任意数组
C语言代码如下:
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
int left = 0;
int right = numsSize - 1;
while(left < right) {
if(nums[left] + nums[right] > target) {
right--;
}else if(nums[right] + nums[left] < target) {
left++;
}else {
int* ret = malloc(sizeof(int) * 2);
ret[0] = nums[left];
ret[1] = nums[right];
*returnSize = 2;
return ret;
}
}
*returnSize = 0;
return NULL;
}
JAVA代码如下:
class Solution {
public int[] twoSum(int[] price, int target) {
int left = 0;
int right = price.length - 1;
while(left < right) {
if(price[left] + price[right] > target) {
right--;
}else if(price[right] + price[left] < target) {
left++;
}else {
return new int[]{price[left],price[right]};
}
}
return new int[]{0};
}
}