ps.新手练习,记录一下力扣题库的一些小错误,均为本机环境测试的。更新中…
1. 官网解法(暴力法:)
package simple;
import java.util.Arrays;
public class twoNumSum {
public static int[] twoSum(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
int a = target - nums[i];
for(int j=i+1;j<nums.length;j++){
if((i!=j) && (a==nums[j]) ){
return new int[] {i,j};
}
}
}
throw new IllegalArgumentException("No two sum solution");
}
public static void main(String[] args){
int[] nums = {2,3,7,10};
int target = 9;
int[] result = twoSum(nums,target);
System.out.println("result:"+Arrays.toString(result));
}
}
错误: 在main()函数里,输出数组result时,原先写的是System.out.println(result)
,导致结果输出是[I@61bbe9ba
,搜索之后发现应该使用.toString()
方法,结果就改成了System.out.println(result.toString())
,结果仍旧错误,再次深入检查,正确写法应该是:(并且需要导入java.util.Arrays
)
System.out.println(Arrays.toString(result));
[I@61bbe9ba
是数组的地址?
[I@61bbe9ba
的[
是指数组,I
指数组存放的数据类型为int,61bbe9ba
是哈希值,表示在内存中的存放的十六进制地址,将此十六进制数转化为十进制数,会发现该十进制数是result数组的hashCode。
(具体介绍:待更新
参考博客:https://blog.csdn.net/zark721/article/details/70254548,https://www.cnblogs.com/1020182600HENG/p/6798744.html,https://blog.csdn.net/lailai84/article/details/79755796,https://www.cnblogs.com/ysocean/p/8616122.html,https://blog.csdn.net/feicongcong/article/details/77893717)
复杂度分析: 时间复杂度:O(n2);空间复杂度:O(1)
结果:
2. 想用ArrayList
这样可以使用contains方法,或者indexOf方法
package simple;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class twoNumSum {
public static int[] twoSum(int[] nums, int target) {
ArrayList numList = new ArrayList();
for (int i = 0; i < nums.length; i++) {
int a = target - nums[i];
numList.add(nums[i]);
int j = numList.indexOf(a);
if(j!=-1 && j !=i){
// if((numList.contains(a)) && (j != i)){
return new int[] {i,j};
}
}
throw new IllegalArgumentException("No two sum solution");
}
public static void main(String[] args){
int[] nums = {2,3,7,10};
int target = 9;
int[] result = twoSum(nums,target);
System.out.println("result:"+Arrays.toString(result));
}
}
复杂度分析: 时间复杂度O(n),空间复杂度O(n)
结果:
会发现这样运行的结果是反的,是因为ArrayList在依次加入数组中的值时,2放进去的时候7还没有,直到add(7)时,ArrayList.contains(9-7),此时的i是7,j是2,因此结果是[2,0].