Leetcode --- NO.1 两数之和

两数之和 — Java

题目如图所示:
题目看到这个题目的第一眼,内心不屑的说了一声切,简直侮辱我智商
表情包1
然后呢,本着我很强,但是也还是要做的心情,三下五除二写了两个for循环
在这里插入图片描述
一顿操作,执行代码,提交,一气呵成
在这里插入图片描述
老天是公平的,他不会让你得瑟很久的
运行结果一出来
what?????
结果怎么可能,才50%!!
用时分布图
哇,这也太太太太太打击人了吧,怎么前面的能够这么多!!
在这里插入图片描述
咱好歹也是学过数据结构的,不行,去 抄抄 借鉴一下他们的先
就那个最前面的吧,看着就很强的亚子

看这代码
看这结构
实在是。。。。
妙啊!!!
在这里插入图片描述
其实这个题目的难点在于找到那个数,找数无非就是遍历,然后判断,程序耗时也就是消耗在遍历这里,看了一下其他的题解,大多用到了 HashMap.

而这里使用的是一种类似于自己创建一个简单的哈希表的方法,indexArrays为那个哈希表,indexArrays中存放的其实是nums中元素的位置

其中的diff & indexArrayMax ,一是为了解决可能存在的负数的情况,二是为了解决nums中数值过大的情况,& indexArrayMax能够使nums中无论是什么数都能被约束到0-2047之间。

总的来说,这样做是比java自带的hashmap要快一点,但是思路是一样的

至于哈希表是什么意思。。。
翻书去!!!

用时1ms
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int indexArrayMax = 2047;
        int[] indexArrays = new int[indexArrayMax + 1];
        for (int i = 0; i < nums.length; i++) {
            int diff = target - nums[i];
            int index = diff & indexArrayMax; //控制下标索引始终为正
            if (indexArrays[index] != 0) {
                return new int[] { indexArrays[index] - 1, i };
            }
            indexArrays[nums[i] & indexArrayMax] = i + 1;
        }
        throw new IllegalArgumentException("No two sum value");
    }
}
leetcode官方方法
class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
            int left = target - nums[i];
            if(map.containsKey(left)){
                return new int[]{map.get(left),i};
            }
            map.put(nums[i],i);
            }
        throw new IllegalArgumentException("No two sum value");
    }
}

恬不知耻的把自己的也放上来
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] c = new int[2];
        for(int a=0;a<nums.length;a++){
            for(int b=a+1;b<nums.length;b++){
                if(nums[a]+nums[b] == target){
                    c[0] = a;
                    c[1] = b;
                }
            }
        }
        return c;
    }
}
发布了27 篇原创文章 · 获赞 12 · 访问量 5193

猜你喜欢

转载自blog.csdn.net/Kobe_k/article/details/101716768