【leetCode】Two Sum

来源:互联网 发布:一秀微场景源码 编辑:程序博客网 时间:2024/06/06 07:10

题目:https://oj.leetcode.com/problems/two-sum/


题意:给定一个数组,和一个target,要求你找出数组中两个元素之和为target 的index,数据保证一定有一个解

/** * 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 */

解决方案:

暴力:O(n^2)

/** * @author lrbrbl * Method 1: 暴力求解 * 复杂度: O(n^2) */class Solution {public int[] twoSum(int[] numbers, int target) {int ans[] = new int[2];int len = numbers.length;for (int i = 0; i < len; i++) {for (int j = i + 1; j < len; j++) {if (numbers[i] + numbers[j] == target) {ans[0] = i + 1;ans[1] = j + 1;return ans;}}}return null;}}
先排序,后处理: O(nlog(n))

import java.util.ArrayList;import java.util.Collections;/** * Method 2: Sort and Find * 复杂度: O(nlog(n)) */class Node implements Comparable<Node>{public int val;public int idx;public Node(int val, int idx) {this.val = val;this.idx = idx;}public int compareTo(Node o) {return this.val < o.val ? -1 : 1;}}class Solution2 {public int[] twoSum(int[] numbers, int target) {ArrayList<Node> al = new ArrayList<Node>();int ans[] = new int[2];int len = numbers.length;for(int i = 0; i < len; i++){al.add(new Node(numbers[i],i));}Collections.sort(al);int l = 0, r = len -1;while(l < r){int sum = al.get(l).val+ al.get(r).val;if(al.get(l).val+ al.get(r).val == target){ans[0] = Math.min(al.get(l).idx, al.get(r).idx)+1;ans[1] = Math.max(al.get(l).idx, al.get(r).idx)+1;break;} else if(sum > target){r--;}else{l++;}}return ans;}}

Hash:O(n)

import java.util.HashMap;/* * Method 3: Hash/Map * 复杂度: O(n) */class Solution3{public int[] twoSum(int[] numbers, int target) {int len = numbers.length;HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();for(int i = 0; i < len; i++){hm.put(numbers[i], i);}int ans[] = new int[2];for(int i = 0; i < len; i++){if(hm.get(target-numbers[i]) != null){ans[0] = i+1;ans[1] = hm.get(target-numbers[i])+1;if(ans[0] != ans[1])break;}}return ans;}}


0 0
原创粉丝点击