LeetCode——Two Sum

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

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

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

Input: numbers={2, 7, 11, 15}, target=9

Output: index1=1, index2=2

中文:给定一个int数组,找出两个数,其和是一个特定的目标数。

twoSum函数应该返回这两个数的序号,其中index1必须小于index2。请注意你返回的答案(index1和index2)都不是以0为基准的。

你可以假设每个输入只有一种方案。

输入:numbers[2,7,11,15], target=9

输出:index1=1, index2=2

按照常规的思路,就是数组,首尾同时扫描,求和与target比较,和相等则结束。时间复杂度O(n*n)。这种方法比较慢,提交了之后,服务器那端用1万多长的数组进行测试,结果就是Time Limit Exceeded,超时了。想想也是,若真用数组这样的遍历,就不用出这道题了。

于是改换一种思路,就是用哈希表。把每个数及其index存入到map中,一边存入一边判断,满足条件即返回并终止判断。时间复杂度O(n)。提交即通过,运行时间440
ms。估计还可以再优化。

	//Time Limit Exceeded
	public int[] twoSum(int[] numbers, int target) {
		int[] ret = new int[2];
		for (int j = numbers.length-1; j >= 0; j--) {
			for (int i = 0; i < numbers.length && i<j; i++) {
				if (numbers[i] + numbers[j] == target) {
					ret[0] = i+1;
					ret[1] = j+1;
					break;
				}
			}
		}
		return ret;
	}

	public int[] twoSum(int[] numbers, int target){
		int[] ret = new int[2];
		HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
		for(int i=0;i<numbers.length;i++){
			Integer n = map.get(target - numbers[i]);
			if(n == null)
				map.put(numbers[i], i);
			if(n != null && n < i){
				ret[0] = n+1;
				ret[1] = i+1;
				break;
			}
		}
		return ret;
	}

LeetCode——Two Sum

时间: 2024-10-19 05:03:01

LeetCode——Two Sum的相关文章

LeetCode OJ - Sum Root to Leaf Numbers

这道题也很简单,只要把二叉树按照宽度优先的策略遍历一遍,就可以解决问题,采用递归方法越是简单. 下面是AC代码: 1 /** 2 * Sum Root to Leaf Numbers 3 * 采用递归的方法,宽度遍历 4 */ 5 int result=0; 6 public int sumNumbers(TreeNode root){ 7 8 bFSearch(root,0); 9 return result; 10 } 11 private void bFSearch(TreeNode ro

leetcode -- 3 sum

3-sum 题目描述: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. 题目要求: Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ 

[leetcode]Combination Sum @ Python

原题地址:https://oj.leetcode.com/problems/combination-sum/ 题意: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. The same repeated number may be chosen from C unlimited

Leetcode:Path Sum 二叉树路径和

Path Sum: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example:Given the below binary tree and sum = 22, 5 / 4 8 / / 11 13 4 / \ 7 2 1 return

LeetCode: Combination Sum [038]

[题目] Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. The same repeated number may be chosen from C unlimited number of times. Note: All numbers (including target)

LeetCode: Combination Sum II [039]

[题目] Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. Each number in C may only be used once in the combination. Note: All numbers (including target) will be

LeetCode——Path Sum II

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum. For example: Given the below binary tree and sum = 22, 5 / 4 8 / / 11 13 4 / \ / 7 2 5 1 return [ [5,4,11,2], [5,8,4,5] ] 给定一个二叉树和一个值,找出所有根到叶的路径和等于

Leetcode:Combination Sum 子集和问题

Combination Sum: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. The same repeated number may be chosen from C unlimited number of times. Note: All numbers (includ

LeetCode: Path Sum II [113]

[题目] Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum. For example: Given the below binary tree and sum = 22, 5 / 4 8 / / 11 13 4 / \ / 7 2 5 1 return [ [5,4,11,2], [5,8,4,5] ] [题意] 判断二叉树中是否存在一条从根到

[leetcode]Path Sum @ Python

原题地址:https://oj.leetcode.com/problems/path-sum/ 题意: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example:Given the below binary tree and sum =