[leetcode]Tow Sum(java)

来源:互联网 发布:淘宝运费险是自动退吗 编辑:程序博客网 时间:2024/05/18 01:42

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.

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

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

一开始的解法是两重循环一一比较,成功AC。
解法一:

public class Solution {    public int[] twoSum(int[] nums, int target) {        if (nums==null)            return null;        int[] records=new int[2];         for(int i=0;i<nums.length;i++)        {            for(int j=0;j<i;j++)            {                if(nums[i]+nums[j]==target)                {                    records[0]=j;                    records[1]=i;                    return records;                }                            }        }        return null;    }}

这算是最简单的方法了,时间复杂度为O(n^n)。考虑实现一层循环的方法,那么考虑容器的使用,考虑依次把数组的值放进去,然后使用target-nums[i],是否在这个容器中,若存在就可以返回一个位置数组,所以容器考虑使用map;
解法二:

public class Solution {    public int[] twoSum(int[] nums, int target) {        if (nums==null)            return null;        int[] records=new int[2];         Map<Integer,Integer> numbers=new HashMap<Integer,Integer>();        for(int i=0;i<nums.length;i++)        {            Integer num=numbers.get(nums[i]);            if(num==null) numbers.put(nums[i],i);            Integer n=numbers.get(target-nums[i]);            if(n!=null&&n<i)            {                records[0]=n;                records[1]=i;                return records;            }        }        return null;    }}
0 0
原创粉丝点击