[Leetcode]Test1 TwoSum [java]题目分析解答

来源:互联网 发布:淘宝评价后不计分 编辑:程序博客网 时间:2024/06/05 23:47

题目

Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].

题目分析:

这里意思是给一个数组和一个数,要求找出数组中两个数之和等于这个数。

tips:

这里题目指出只能有一个唯一的答案且不可以用相同的元素两次。

思路:

这道题我没用什么特殊技巧,暴力解法,两个循环,找到相加等于target的两个数。

public class Test1TwoSum { public int[] twoSum(int[] nums, int target) {        for (int i = 0; i < nums.length; i++) {            for (int j = 0; j < nums.length; j++) {                if(nums[i] + nums[j] == target &&                        i != j) {                    return new int[] {i, j};                }            }        }        return new int[] {};    }}


然后我发现竟然还有一堆人只用了8ms,而我用了43ms。所以借鉴了一下HashMap的做法。HashMap是一个比较消耗空间的做法,但是相对的会节省时间。

public class Solution {    // if there is solution, with exactly one solution    // element in array can not be used twice    /* array is not ordered */    public int[] twoSum(int[] nums, int target) {        if(nums == null || nums.length == 0) return new int[]{-1, -1};        HashMap<Integer,Integer> map = new HashMap<>();                for (int i = 0; i < nums.length; i++) {            // put element into hashtable and check whether there is a solution            // numbers  -> index            if(map.containsKey(target -nums[i])) {                // has solution                return new int[]{map.get(target -nums[i]), i};            }            map.put(nums[i], i);        }         // no solution        return new int[]{-1, -1};    }}




 
原创粉丝点击