这道题不排序,用n方的算法算会超时。
首先用Array.sort()排序,因为要返回原来的数组下标,所以原来的数组不能丢。
注意相同元素[0,4,2,0] target=0这种情况的处理,结果应该是两个0
public class Solution {
public int[] twoSum(int[] numbers, int target) {int num0=0,num1=0;
int n=numbers.length;
int i;
int[] numbers_unsort=new int[n];
int[] diff=new int[n];
int[] rst=new int[2];
for(i=0;i<n;i++)
{
numbers_unsort[i]=numbers[i];
}
Arrays.sort(numbers);
for(i=0;i<n;i++)
{
diff[i]=target-numbers[i];
}
int p1=0,p2=n-1;
for(i=0;i<n;i++)
{
if(numbers[p1]>diff[p2])
p2--;
else if(numbers[p1]<diff[p2])
p1++;
else if(p1!=p2)
break;
}
*
for(i=0;i<n;i++)
{
if(numbers_unsort[i]==numbers[p1])
rst[0]=i+1;
if(numbers_unsort[n-1-i]==numbers[p2])
rst[1]=n-i;
}
if(rst[0]>rst[1])
{ i=rst[0];rst[0]=rst[1];rst[1]=i;}
return rst;
}
}
本文介绍了一种优化算法,通过先对数组进行排序,然后利用双指针技巧,实现快速查找两个数之和等于目标值的解决方案。特别针对数组中存在重复元素的情况进行了优化处理,确保正确返回所有符合条件的索引对。
343

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



