找出其中两个数相加等于目标值

找出其中两个数相加等于目标值

import com.alibaba.fastjson.JSON;

import java.util.HashMap;

/**
 * 找出其中两个数相加等于目标值
 */
public class Find {

    public static void main(String[] args) {
        int [] nums = {4,2,7,11,15,5};
        int target = 9;
        find(nums,target);
    }

    /**
     * 使用辅助空间(使用哈希表,时间复杂度是O(n),空间复杂度:O(n),n是数组大小)
     */
    public static void find(int[] nums, int target){

        // 目标是数组下标,所以键值对为<数值,数值对应数组下标>,这里要说一下,哈希表的查找的时间复杂度是O(1)
        HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
        // 1.扫描一遍数组,加入哈希表,时间复杂度是O(n)
        for(int i=0;i < nums.length;i++)
        {
            map.put(nums[i], i);
        }

        // 2.第二次扫描,目标值-当前值,差值作为key,看看map里有木有,没有就下一个循环,直到数组扫描完毕或找到value,所以最坏情况的时间复杂度是O(n)
        for(int i=0;i<nums.length;i++)
        {
            // 得到第二个数的值
            int two = target - nums[i];
            // 如果存在第二个数的数组下标&&结果的两个数不是同一个数的值
            if(map.containsKey(two) && target != 2 * two)
            {
                // 返回找到的两个数的数组下标
                System.out.println(nums[i] + "," + two);
            }
        }
    }

}

猜你喜欢

转载自my.oschina.net/daijunjian/blog/1795190