leetcode-01-twosum

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
在这里插入图片描述
算法描述:假设nums=[1,2,9,7,5]
数组没有被排序,而target是9
①:暴力解法:
(1):index=0时—>number=1。然后遍历,找到number=8的数。
index=1时—>number=2。然后遍历,找到number=7的数。发现number=7的index=3.所以返回index=1和index=3。
…依次类推
但是时间复杂度O(n^2)空间复杂度O(1)
(2) :number=9----->number=target-9=0;map, 9--------
利用map,存储number以及对应的位置。map(number–>index)
过程如下:
number index
number=1----->number=target-1=8;map, 1-------->0
number=2----->number=target-2=7;map, 2-------->1
number=9----->number=target-9=0;map, 9-------->2
number=7----->number=target-9=2;这时候在map中有number=2的inedx,而且index=1。return (index=3,index=1)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        //数组与目标数组
        int[] res=new int[2];
        //返回目标值的索引下标
        //剔除两种情况,空数组或者小于1的数组
        if(nums==null||nums.length<=1) return res;
        //设置哈希表,通过值找到索引位置
        //key:value.键值对形式
        HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
        for(int i=0;i<nums.length;i++){
            //位置的值存在局部变量上
            int num=nums[i];
            //得到目标值
            int val=target-num;
            //看看val是否在map中
            if(map.containsKey(val)){
                //在map中了,把刚开始的位置给数组第一个元素
                //再把val的索引位置找到
                res[0]=i;
                res[1]=map.get(val);
                return res; 
            }
            //如果map中没有val,那么就存在map中
            else map.put(num,i);
        }
        return res;
    }
}

感谢B站博主,basketwangcoding在我初学算法是提供讲解以及思路。

发布了16 篇原创文章 · 获赞 0 · 访问量 232

猜你喜欢

转载自blog.csdn.net/weixin_44110100/article/details/105471001