LeetCode-Two Sum

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].

我的方法:

package com.leetcode.study;

public class Main {

    public static void main(String[] args) {
        int[] nums = new int[]{2,7,11,15};
        int target = 9;
        System.out.println(twoSum(nums, target)[0]);
        System.out.println(twoSum(nums, target)[1]);

    }
    
    public static int[] twoSum(int[]nums,int target){
        int first=0;
        int second=0;
        boolean flag=false;
        for(int i = 0;i<nums.length;i++){
            for(int j = 0;j<nums.length;j++){
                if(i==j)continue;
                if(nums[i]+nums[j]==target){
                    first=i;
                    second=j;
                    flag=true;
                    break;
                }
            }
            if(flag==true){
                break;
            }
        }
        return new int[]{first,second};
    }

}

我的思路是两重循环,来计算和。

 我的思路比较耗时,下面看LeetCode提供的;另外两种速度较快的算法。

package com.leetcode.study;

import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        int[] nums = new int[]{2,7,11,15};
        int target = 9;
        System.out.println(twoSum(nums, target)[0]);
        System.out.println(twoSum(nums, target)[1]);

    }
    
    public static int[] twoSum(int[]nums,int target){
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for(int i = 0;i<nums.length;i++){
            map.put(nums[i],i);
        }
        for(int i = 0;i<nums.length;i++){
            int res = target-nums[i];
            if(map.containsKey(res)){
                return new int[]{i,map.get(res)};
            }
        }
        throw new IllegalArgumentException("No two sum solution.");
    }

}

这种方法使用了java里面的hashmap集合。首先通过一次循环把所有的数放到hashmap中,然后,通过hashmap的containsKay方法来判断。

还有一种方法是更简单的方法。使用一次循环就可以。下面看代码。

package com.leetcode.study;

import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        int[] nums = new int[]{2,7,11,15};
        int target = 9;
        System.out.println(twoSum(nums, target)[0]);
        System.out.println(twoSum(nums, target)[1]);

    }
    
    public static int[] twoSum(int[]nums,int target){
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for(int i = 0;i<nums.length;i++){
            int res = target-nums[i];
            if(map.containsKey(res)){
                return new int[]{map.get(res),i};
            }
            map.put(nums[i], i);
        }
        throw new IllegalArgumentException("No two sum solution.");
    }

}

 

posted @ 2018-04-10 20:58  alittlecomputer  阅读(137)  评论(0编辑  收藏  举报