Leetcode-1 Two Sum(Java) -by zzy

1 篇文章 0 订阅
1 篇文章 0 订阅

Problems:
Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

Answers:
1,双重循环
Time complexity in worst case: O(n^2).

public static int[] twoSum(int[] numbers, int target) {
    int[] ret = new int[2];
    for (int i = 0; i < numbers.length; i++) {
        for (int j = i + 1; j < numbers.length; j++) {
            if (numbers[i] + numbers[j] == target) {
                ret[0] = i + 1;
                ret[1] = j + 1;
            }
        }
    }
    return ret;
}

2,Hashtable

import java.util.Hashtable;
public class Solution {
    public int[] twoSum(int[] numbers, int target) {

        Hashtable<Integer,Integer> ht = new Hashtable<Integer,Integer>();
        int[] result = new int[2];

        for(int i = 0; i < numbers.length; i++ ){
            if(ht.get(target-numbers[i]) != null){//当标志值减去当前值在hashtable里存在,即和减去其中一个值=另一个值已存在,则返回那个值的下标 ps:null一定要小写,一定要引入import包
            result[0] = ht.get(target-numbers[i])+1;//将当前数组值的下标取到,即hashtable得value
            result[1] = i+1;
            break;
            }else{
                ht.put(numbers[i],i);//用key存数组值而value存下标
            }
        }
        return result;
    }
}

3,HashMap
Use HashMap to store the target value.

public class Solution {
    public int[] twoSum(int[] numbers, int target) {

        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
   int[] result = new int[2];

for (int i = 0; i < numbers.length; i++) {
if (map.containsKey(numbers[i])) {
int index = map.get(numbers[i]);
result[0] = index+1 ;
result[1] = i+1;
break;
} else {
map.put(target - numbers[i], i);
}
}

return result;
    }
}

The 2 and 3 solutions are better than 1.
Time complexity depends on the put and get operations of HashMap/Hashtable which is normally O(1).

Time complexity of thesw solutions: O(n).

The deferences between hittable and hash map:(转自百度经验)
1、继承类不同:
A.HashMap继承AbstractMap
B.Hashtable继承Dictionary
2、执行效率不同:
A.HashMap是非线程安全的,是Hashtable的轻量级实现,效率较高
B.Hashtable是线程安全的,效率较低
3、put方法对key和value的要求不同
A.HashMap允许Entry的key或value为null
B.Hashtable不允许Entry的key或value为null,否则出现NullPointerException
4、有无contains方法
A.HashMap没有contains方法
B.Hashtable有contains方法
5、Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
6、Hashtale是Syncchronize的,而HashMap是Asyncchronize的,当多个线程访问Hashtable时,Hashtable不需要自己为它的方法实现同步;而当多个线程访问HashMap时,需要通过Collections.synchronizedMap来同步HashMap。

参考:http://oznyang.iteye.com/blog/30690

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值