美文网首页
算法练习-1

算法练习-1

作者: 夏沫_琅琊 | 来源:发表于2019-04-10 19:14 被阅读0次

两数之和

给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]


解法1:

遍历每个数组元素,并获取与target减去该元素的相等的元素的下标。

class Solution {

    public int[] twoSum(int[] nums, int target) {

        for(int i=0;i<nums.length;i++){

            for(int j=1;j<nums.length;j++){

                if(nums[i]+nums[j]==target&&i!=j){

                    return new int[]{i,j};

                }

            }

        }

        return new int[0];

    }

}

时间复杂度:O(n 
2
 )

空间复杂度:O(1)


2:双哈希表

对方法1进行的优化,减少时间复杂度。

还是两次迭代,第一次我们将每个元素的值和它的索引添加到表中,第二次我们判断每个元素所对应的目标元素(target - nums[i])是否存在于表中,当然这个元素不能是nums[i]本身。

class Solution {

    public int[] twoSum(int[] nums, int target) {

        Map<Integer,Integer> map=new HashMap<>();

        for(int i=0;i<nums.length;i++){

            map.put(nums[i],i);

        }

        for(int i=0;i<nums.length;i++){

            int number=target-nums[i];

            if(map.containsKey(number)&&map.get(number)!=i){

                return new int[]{i,map.get(number)};

            }

        }

        return new int[0];

    }

}

时间复杂度和空间复杂度均为:O(n)


3:一遍哈希表

方法二进行了两次遍历,将插入和判断分为两次。那么一次遍历可以完成这些操作吗?

当然可以。

class Solution {

    public int[] twoSum(int[] nums, int target) {

        Map<Integer,Integer> map=new HashMap<>();

        for(int i=0;i<nums.length;i++){

            int number=target-nums[i];

              if(map.containsKey(number)){

                return new int[]{map.get(number),i};

                }

            map.put(nums[i],i);

        }

        return new int[0];

    }

}

时间复杂度和空间复杂度同样是O(n)


相关文章

  • 算法练习-1

    两数之和 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的...

  • 算法日常练习-1

    Q : 在一个二维数组中,从左到右,从上到小都是递增的。查找数组中的某一个元素

  • go算法练习1

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的...

  • 最近一周计划

    1.准备蓝桥杯竞赛,每天至少抽出一个小时练习算法 2.小组MySQL进度放慢,适当分配时间给算法练习 3.养成早睡...

  • python算法题练习1

    Description 实现一个函数exp:它接受一个正的小数参数 epsilon,按照如下算法计算 e^x 的近...

  • 算法练习[1-2]

    数据结构之线性表定义 线性表定义:由n各数据元素的有序序列构成,元素可以是一个数或者一个字符,也可以是一个定义对象...

  • LeetCode算法题库练习1

    1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数...

  • 算法练习1:链表算法的解题思路

    一般追赶问题,环大小,都可以使用链表的双指针问题解决。 判断一个链表是否有环? 创建两个指针,一个快指针,一个慢指...

  • 7,18三升四今日教学

    数学 1、复习三步混合运算的算法,解决实际问题 2、掌握含小括号的混合运算的算法 3、竖式计算练习 英语 1、复习...

  • 前端干货 -03

    37. 算法 算法地址 数据结构与算法 JavaScript 描述. 章节练习https://github.com...

网友评论

      本文标题:算法练习-1

      本文链接:https://www.haomeiwen.com/subject/tkeoiqtx.html