力扣第一题-两数之和(java)

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].
在这里插入图片描述

3. 官网解法之map

官网解法之三

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值