对于这道题,我是用java做的,一通百通了。话不多说,先贴出自己的代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
int i=0;
int j=0;
for(i=0;i<nums.length;i++){
int a=nums[i];
int b=target-a;
if(getIndex(nums,b)!=-1){
j=getIndex(nums,b);
if(i!=j)
break;
}
}
int []result=new int[2];
result[0]=i;
result[1]=j;
return result;
}
public static int getIndex(int[] arr, int value) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == value) {
return i;
}
}
return -1;//如果未找到返回-1
}
}
对于这道题,我本是不想使用双重循环遍历数组的方法去解,结果思索许久,写出来的代码,实质上还是双重循环,颇感无奈
运行结果如上
但这样的结果我并不满意。于是,我参考了其他大牛的代码,写出了如下代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
List<Integer> list = new ArrayList();
int [] result=new int[2];
for(int i=0;i<nums.length;i++){
int a=target-nums[i];
if(list.indexOf(a)!=-1){
result[1]=i;
result[0]=list.indexOf(a);
break;
}
list.add(nums[i]);
}
return result;
}
}
虽然程序复杂度O降低了,但运行速度反而下降了,不过消耗的内存却是减少了
在学习过程中我看到了一位大牛的代码,运行效率之高,令人叹为观止
这道题的核心,我认为还是要从哈希表入手,减小时间复杂度,这样就能提高实际效率