LeetCode ( 1 )---两数之和(Java)

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode ( 1 )---两数之和(Java)相关的知识,希望对你有一定的参考价值。

题目来源链接:两数之和


题目说明:


解法1:直接暴力解法;双层循环嵌套,遍历两次数组;

class Solution {
    public int[] twoSum(int[] nums, int target) {
        //定义一个长度为2的新数组 arr ;
        int[] arr=new int[2];
        //从第一个数开始遍历数组nums;
        for (int i = 0; i < nums.length; i++) {
            //遍历数组nums(这里遍历时的起点要和开始的遍历慢一步,避免同时取到同一个索引);
            for (int j = i+1; j < nums.length; j++) {
                //当两个索引匹配的元素之和为target时;就把索引值赋值给新数组 arr ;
                if(nums[i]+nums[j]==target){
                    arr[0]=i;
                    arr[1]=j;
                }
            }
        }
        return arr;
    }
}

时间复杂度:O(n²)空间复杂度:O(1);运行效率差;

解法优化:

引入hashmap;将数组值存入hashmap中;值为key,索引为value; 然后在map集合中寻找另一半key值是否存在; 且索引i和另一半的索引不能是同一个;

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap();
        for (int i = 0; i < nums.length; i++) {
            //将数组按照(值,索引)存入map集合;
            map.put(nums[i], i);
        }
        for (int i = 0; i < nums.length; i++) {
            int j = target - nums[i];
            //判断和为target的另一个数值(即map集合的键:key值)是否存在;且数组的索引(value)不是同一个;
            if (map.containsKey(j) && i != map.get(j)) {
                //将符合条件的索引存入新建数组中;
                return new int[]{i, map.get(j)};
            }
        }
        //抛出参数异常;
        throw new IllegalArgumentException("The data element for NUMS does not exist ");
    }
}

时间复杂度,空间复杂度 O(n)


以上是关于LeetCode ( 1 )---两数之和(Java)的主要内容,如果未能解决你的问题,请参考以下文章

算法 Notes|LeetCode 1. 两数之和 - easy

LeetCode:两数之和

前端与算法 leetcode 1. 两数之和

[算法] LeetCode 1.两数之和

LeetCode 1两数之和

LeetCode——1.两数之和