每天一个算法pan之两数和

lintCode题目:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target

写在前面

这个题目其实不难,有多种方法,不过需要注意的就是效率问题了。

算法1

我想到的简单方法就是直接两个循环。

    public int[] twoSum(int[] numbers, int target) {
        // write your code here
        for(int i=0; i

这个算法跑完lintCode上面的testcase花了2013ms。

算法2

使用一个循环加一个hashmap来记录的方式。

    public int[] twoSum(int[] numbers, int target) {
        // write your code here
        HashMap map = new HashMap<>();
        for(int i=0; i

这个跑testcase花了1854ms。

总结

我觉得好像两个算法差别不大?毕竟hashmap的get方法是需要根据key的hashcode算出元素在数组的下标,然后在遍历entry对象链表查找的,只是hashmap的查询效率高一些。

你可能感兴趣的:(算法)