两数之和 Posted on 2021-07-15 00:00:00 2021-07-16 00:00:00 by Author 摘要 给定一个数组与一个目标值traget,你能找出数组中两个元素和为target的元素的下标吗??? # 两数之和 1. 题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。(你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍.。) 2. 示例描述: - 示例一: - 输入:nums = [2, 7, 11, 15], target = 9 - 输出:[0, 1] - 解释:nums[0] + nums[1] = 2 + 7 = 9 - 示例二: - 输入:nums = [2, 7, 11, 15, 4, 30], target = 6 - 输出:[0, 4] - 解释:nums[0] + nums[4] = 2 + 4 = 6 3. 题解思路:对于该题,第一种方法可以使用暴力解法,其时间复杂度为(O(n*n)),这里不做过多说明。本题的解法使用HashMap解法,首先定义一个HashMap表,键表示的是数组对应下标的值,值表示数组的下标。然后遍历整个数组,看当前下标的值,与hashMap表中的除此下标之外的值的和是否为target,,如果和为target说明找到两个数,满足题目要求,返回这两个数对应的下标,否则依次执行以上步骤,直到遍历结束还未找到的话就返回null。具体实现细节,见如下代码。 4. 代码示例: ```java int[] twoSum(int[] nums, int target) { //定义一个hashMap表分别为<数组下标对应得值,数组下标> Map<Integer, Integer> hashMap = new HashMap(); //首先初始化HaspMap表 for (int i = 0; i < nums.length; i++) { hashMap.put(nums[i], i); } for (int i = 0; i < nums.length; i++) { //对于数组第i个位置的数,看hashMap表中除此下标之外的值与当前下标的值的和是否为target int num = target - nums[i]; //如果是,就返回下标 if (hashMap.containsKey(num) && hashMap.get(num) != i) { return new int[]{i, hashMap.get(num)}; } } //遍历整个数组都没找到,返回null return null; } ```
{{ item.content }}
{{ child.content }}