每日算法——Day1 两数之和

(题目来源:力扣LeetCode)

题目:

给定一个整数数组 nums 和一个目标值 target,在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

方法一:

枚举法:

遍历所有数字,找出两数之和与目标值相等的数的组合


两个变量for循环:i,j且都与n相关,所以时间复杂度为O(n*2)

只用到常数个临时变量,所以空间复杂度为O(1)

方法二:查找表法

(使用一个表,先抓取一个元素,如果没有与之配对的另一个元素,则将该元素放在表中,然后继续向下寻找,直到找出配对的两数)

比如:

第一个数6,8-6=2。2不在表中,所以将数字6放入表中,并向后抓取第二个数进行测试。第二个数3,8-3=5。5不在表中,所以将数字3放入表中,继续向后抓取......


class Solution {

    public int[] twoSum(int[] nums, int target) {

        //定义一个hashmap

        Map map = new HashMap<>();

        //遍历数组

        for(int i =0; i

            //如果存在一个key值,使target-num[i]=key,返回key的下标和i对应值的下标

            if(map.containsKey(target-nums[i])){

                return new int[]{map.get(target-nums[i]),i};

            }

            //如果不存在key值,使target-num[i]=key,将键值对存入表中;

            map.put(nums[i],i);

        }

        //当遍历完数组也没有找到两数之和为目标值,抛出异常

        throw new IllegalArgumentException("No two sum soltion");

    }

}

你可能感兴趣的:(每日算法——Day1 两数之和)