两数相加

题目:两数相加
描述:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数
实例:给定nums=[2,7,11,15],target=9
因为nums[0]+nums[1]=2+7=9,所以返回[0,1]
解法1

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

缺点:时间复杂度为O(n*n)

解法2:

public int[] twoSum(int[] nums,int target) {
		Map<Object, Object> map = new HashMap< >();
		for(int i=0;i<nums.length;i++) {
			int complement=target-nums[i];
			if(map.containsKey(complement)) {
				return new int[] {map.get(complement),i};
			}
			map.put(nums[i],i);
		} 
	}

总结
转化思想,与其一个个比较数组中的两数之和是否为目标值不如确定一个加数,使用目标值减去其得到另一个加数,看是否在数组中存在。

你可能感兴趣的:(算法,leetcode)