[LeetCode][1]Two Sum解析 -Java实现

原创 2016年06月01日 16:23:30

Q:

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution.

A:

以下解法和代码没有借阅以往任何资料,如果有更好的解法请在评论区留言

题目的意思是给一个数组,给一个特殊的数字,返回数组中相加等于目标数字的两个索引,你可以假设每一个特殊数字都是单解。

public class TwoSum {
	public static int[] twoSum(int[] array,int target){
		for(int i=0;i<array.length;i++){
			for(int j = 0;j<array.length-i;j++){
				if((array[i]+array[j])==target)
					return new int[]{array[i],array[j]};
			}
		}
		return null;
	}
	public static void main(String[] args){
		int[] array = new int[]{1,2,3,4,5,6,7,8,9};
		int[] indices = TwoSum.twoSum(array, 5);
		if(indices!=null){
			System.out.println(indices[0]+"    "+indices[1]);
		}
	}
}
这是基础解答,一般人第一反应应该都是这样,这种方法遍历两次代价太高,我们可以具体解析一下看看有没有更加便捷的解决方法。

只要我们取出array中的max和min,去掉array中大于target-min和小于target-max的数值,这样可以缩减范围,生成newarray。

那么接下来我们只需要对有序序列newarray中的头尾相加,如果大于target则把尾值去掉,如果小于target则把头值去掉,这样可以把两次循环O(n^2)化为O(2n)约等于O(n)

但是,这时候我们发现排序算法是O(n^2)的,所以这种解法就无解了。

另一种情况,我们把target的所有情况列出来一共有floor(target/2)种,我们只要维护这样一个数组targetArray[0-target]只要targetArray[i]>=1且targetArray[target-i]>=1即可返回。(假设array中没有负数)

代码如下

	public static int[] newTwoSum(int[] array,int target){
		int[] targetArray = new int[target+1];
		for(int i :array){
			if(i>=0&&i<=target){
				targetArray[i]++;
				if(targetArray[target-i]>=1){
					return new int[]{i,target-i};
				}
			}
		}
		return null;
	}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Two Sum -- LeetCode

原题链接: http://oj.leetcode.com/problems/two-sum/ 这是一道非常经典的题目,brute force时间复杂度为O(n^2), 对每一对pair两两比较。 优...

LeetCode || Two Sum

Two Sum  Total Accepted: 16363 Total Submissions: 87273My Submissions Given an array of ...

LeetCode题解--1. Two Sum(和为S的两个数字)

题目地址https://leetcode.com/problems/two-sum/ 描述给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字。要求:这个函数twoSum必须要返回能够相加等于...
  • gatieme
  • gatieme
  • 2016年01月27日 22:32
  • 2727

LeetCode::Two Sum C语言

题目 Given an array of integers, find two numbers such that they add up to a specific target number. ...

Two sum算法

坚持每一天都刷leetcode,坚持每一天都分享一题上来题目 Given an array of integers, return indices of the two numbers such t...

LeetCode题解:Two Sum

Two Sum Given an array of integers, find two numbers such that they add up to a specific target num...
  • MagiSu
  • MagiSu
  • 2013年10月16日 05:33
  • 7548

TwoSum

Question Given an array of integers, return indices of the two numbers such that they add up to a s...

leetcode 1. Two Sum -----java

题目链接:https://leetcode.com/problems/two-sum/ 题目: Given an array of integers, return indices of th...

LeetCode: Two Sum (Java)

最近G家的HR联系的紧,也不好意思一直拖着,再加上现在在EA干的活没啥意思,能跳的话也好,所以再一次开始刷题了,只是,之前用c++,现在要用java了。。。哎,编程语言来来回回的变啊。。。 废话不说...

【LeetCode-面试算法经典-Java实现】【001-Two Sum(求两个数的和)】

给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字。要求:这个函数twoSum必须要返回能够相加等于目标数字的两个数的索引,且index1必须要小于index2。请注意一点,你返回的结果(包...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode][1]Two Sum解析 -Java实现
举报原因:
原因补充:

(最多只允许输入30个字)