Java实现两数之和「建议收藏」

Java实现两数之和「建议收藏」给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。即:每个index上的数字只能用一次示例:给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]方法一:暴力法遍历每个元素x,并查找是否存在一个值与target…

大家好,又见面了,我是你们的朋友全栈君。

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。即:每个index上的数字只能用一次

示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

1.方法一:暴力法

遍历每个元素x,并查找是否存在一个值与target−x相等的目标元素。

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 (nums[j] == target - nums[i]) { 
   
                return new int[] { 
    i, j };
            }
        }
    }
    throw new IllegalArgumentException("No two sum solution");
}

2.方法二:两遍哈希表

一个简单的实现使用了两次迭代。在第一次迭代中,我们将每个元素的值和它的索引添加到表中。然后,在第二次迭代中,我们将检查每个元素所对应的目标元素(target−nums[i])是否存在于表中。注意,该目标元素不能是nums[i]本身!

public int[] twoSum(int[] nums, int target) { 
   
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) { 
   
        map.put(nums[i], i);
    }
    for (int i = 0; i < nums.length; i++) { 
   
        int complement = target - nums[i];
        if (map.containsKey(complement) && map.get(complement) != i) { 
   
            return new int[] { 
    i, map.get(complement) };
        }
    }
    throw new IllegalArgumentException("No two sum solution");
}

3.方法三:一遍哈希表

事实证明,我们可以一次完成。在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。

public int[] twoSum(int[] nums, int target) { 
   
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) { 
   
        int complement = target - nums[i];
        if (map.containsKey(complement)) { 
   
            return new int[] { 
    map.get(complement), i };
        }
        map.put(nums[i], i);
    }
    throw new IllegalArgumentException("No two sum solution");
}

本文参考:
https://leetcode-cn.com/problems/two-sum/solution/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130468.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号