
这题可以用暴力法,直接遍历求解,但是双指针法更巧妙:
因为数组是有序的,所以可以用双指针,指向数组的首尾,具体步骤如下:
1.初始化:指针i指向数组首, 指针j指向数组尾部
2. 如果arr[i] + arr[j] == sum , 说明是可能解
3. 否则如果arr[i] + arr[j] > sum, 说明和太大,所以–j
4. 否则如果arr[i] + arr[j] < sum, 说明和太小,所以++i
代码如下:
using System.Collections.Generic;
class Solution
{
public List<int> FindNumbersWithSum(int[] array, int sum)
{
List<int> ret=new List<int>();
int left=0;
int right=array.Length-1;
int minleft=9999;
int minright=9999;
bool isExist=false;
while(left<right)
{
if(array[left]+array[right]==sum)
{
isExist=true;
if(array[left]*array[right]<minleft+minright)
{
minleft=array[left];
minright=array[right];
}
right--;
left++;
}
else
{
if(array[left]+array[right]>sum)
{
right--;
}
if(array[left]+array[right]<sum)
{
left++;
}
}
}
if(isExist)
{
ret.Add(minleft);
ret.Add(minright);
}
return ret;
}
}
本文介绍了一种使用双指针法解决数组中寻找两个数使其和为特定值的问题。通过利用数组已排序的特点,从两端开始向中间逼近,有效提高了查找效率。文章详细解释了算法步骤,并提供了C#实现代码。
471

被折叠的 条评论
为什么被折叠?



