LeetCode_1 两数之和[java版]解法

题目描述

给定一个整数数组 n u m s nums nums 和一个目标值 t a r g e t target target,请你在该数组中找出为目标值的那两个整数,并返回他们的数组下标
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

网址链接:leetcode 两数之和

1、Java解法

1.1 暴力法(双重循环)

直接使用双重循环,外层循环遍历数组得一个 x x x ,内层循环也遍历数组得一个 y y y ,并且在循环里判断 t a r g e t target target 是否等于 x + y x + y x+y ,若满足条件,直接输出 x x x y y y 的坐标即可。
这种解法的时间复杂度 O ( n 2 ) O(n^2) O(n2) ,空间复杂度 O ( 1 ) O(1) O(1)

代码:


    public int[] twoSum(int[] nums, int target) {
    	// 循环遍历数组
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
            	// 判断内外层循环遍历的两个数的和是否等于给定的目标值
                if (target == nums[i] + nums[j]) {
                	// 若满足,输出两个数的坐标
                    return new int[]{i, j};
                }
            }
        }
        throw new IllegalArgumentException("找不到想要的下标值");
    }

在这里插入图片描述

1.2 一遍哈希表法

通过循环,每循环一次,将当前循环的那个数放入一个临时的 h a s h m a p hashmap hashmap数组中,其中键为当前的数,值为该数的数组下标。每循环一个数,都要在临时的那个数组中进行一个条件判断,利用 c o n t a i n s K e y ( ) containsKey() containsKey() 方法判断是否存在 t a r g e t − n u m [ i ] target - num[i] targetnum[i] 这个值。如果存在则输出这两个数的下标即可。
这种解法的时间复杂度 O ( n ) O(n) O(n) ,空间复杂度 O ( n ) O(n) O(n)

代码:


	public int[] twoSum(int[] nums, int target) {
		// 建立一个临时数组
        Map<Integer, Integer> tempArr = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
        	// 判断在数组tempArr中是否存在target - num[i]这个数
            if (tempArr.containsKey(target - nums[i])) {
            	// 若存在,则返回nums[i]这个数的下标,以及target - nums[i]这个键在tempArr中所对应的值
                return new int[]{tempArr.get(target - nums[i]), i};
            } else {
            	// 若不存在,则将nums[i]这个数放入tempArr中
                tempArr.put(nums[i], i);
            }
        }
        throw new IllegalArgumentException("找不到想要的下标值");
    }
    

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值