两数之和target

说明:题目来自于力扣:1. 两数之和 - 力扣(Leetcode)

题目概述

给定一个整数数组和一个整数目标,返回这两个数字的索引,使它们相加成为目标。

您可以假定每个输入将只有一个解决方案,并且不能使用同一个元素两次。

你可以按任何顺序返回答案。

英文:

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

示例:

Example 1:

Input: nums = [2,7,11,15], target = 9

Output: [0,1]

Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].

Example 2:

Input: nums = [3,2,4], target = 6

Output: [1,2]

Example 3:

Input: nums = [3,3], target = 6

Output: [0,1]

思路

方法一:用暴力的方式去解决,两个for循环,第一个for循环依次遍历nums[]数组中的每一个值nums[i],第二个for循环依次遍历nums[i]之后的每一个值nums[j],再判断nums[i]+nums[j]是否为target,返回下标。缺点:时间复杂度为o(),但思路简单。

方法二:用HashMap去做,时间复杂度可以降到o(n)。因为我们要找到nums[i]+nums[j]=target,由于target是已知的,nums[i]的i也是已知的,因此我们只需找到

target-nums[i]得到nums[j]。通过HashMap的key(键nums[j])找到其对应的值(value)i.

注意:这里HashMap的键为nums[j],而值为对应的下标j。

方法一和方法二中的nums[j]只是代表要找的一个值,和nums[i]相加和为target

class Solution {
    public int[] twoSum(int[] nums, int target) {
       Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums.length;i++){                       
            if(map.containsKey(target-nums[i])){   //判断是否包含target-nums[i]
                return new int[]{map.get(target - nums[i]), i};//如果包含则返回下标
            }
            else{
                map.put(nums[i],i);//不包含将nums[i]放到HashMap中
            }
        }
        return new int[0];
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值