【发布时间】:2021-08-23 23:02:12
【问题描述】:
我正在处理 leetcode 问题。我刚刚解决了以下问题:
给定一个整数数组,找到两个数字,使它们相加为一个特定的目标数字。
函数 twoSum 应该返回两个数字的索引,使得它们相加到目标,其中 index1 必须小于 index2。请注意,您返回的答案(index1 和 index2)不是从零开始的。
您可以假设每个输入都只有一个解决方案。
输入:数字={2, 7, 11, 15},目标=9 输出:index1=1,index2=2
我的代码在这里:
public class Solution {
public int[] twoSum(int[] numbers, int target) {
int len = numbers.length;
int[] result = new int[2] ;
int number1 = 0;
int sum = 0;
for (int i = 0; i < len; i++) {
number1 = numbers[i];
for(int j = i+1; j < len; j++)
{
sum = number1+numbers[j];
if(sum == target)
{
result[0]=i;
result[1]=j;
}
}
}
return result;
}
}
它给了我一个超出时间限制;但是,我认为这个解决方案可能有效。谁能告诉我这个解决方案是否足够好?
【问题讨论】:
-
问题是您当前的算法是 O(N^2) 并且在 100 个元素的数组中会花费太多时间。尝试将您的算法更改为使用 O(Nlog2N) 算法,甚至更好,将其转换为线性算法。
-
@LuiggiMendoza 谢谢,但解决方案会奏效。问题是效率不高。
-
再说一次,并不是你当前的解决方案不能解决问题,而是你的算法太慢了。