20191211——java力扣 两数之和

  • 时间:
  • 来源:互联网

两数之和
之前都是用python来完成的力扣上的题目,听一个师兄说还是用编译型语言来完成题目比较好,复习了一下java,然后用java来完成题目

第一个方法还是暴力破解法
遍历之后用一个变量存储差值,然后来遍历nums[j]有没有等于这个差值,然后返回

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

第二个方法利用哈希表进行处理,会减少查询时间
基础中也学习到过哈希表,是一个map键值(key)-数值(value)对应类型存储数据的接口,数组中我们索引的是数组下标来对内容进行查询,但是在map中我们通过对象来进行索引,索引的对象叫做key,获取到的内容叫做value
hashmap是map的实现类,hashmap存储数据采用哈希表结构,元素的存取顺序不能保证一致,但键值是不重复的,唯一的。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        int[] result = new int[2];
        for(int i =0;i<nums.length;i++){
            int dif = target-nums[i];
            if(map.get(dif) != null){
                result[0] = i;
                result[1] = map.get(dif);
            }else{
                map.put(nums[i],i);
            }
        }
        return result;
    }
}

第三个方法
官方给的答案是进行了两遍哈希表,第一遍把数组的数都存放在哈希表中,第二遍进行遍历寻找。

其他
在这里插入图片描述

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

最后的改进

宫城诗
发布了585 篇原创文章 · 获赞 39 · 访问量 6万+

本文链接http://element-ui.cn/news/show-1029.aspx