【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
- 【Leetcode】Two Sum (Sum)
- LeetCode: Two Sum
- LeetCode: Two Sum
- [Leetcode] Two Sum
- LeetCode : Two Sum
- Leetcode: Two Sum
- leetcode 46: Two Sum
- [LeetCode] Two Sum
- LeetCode 1 - Two Sum
- Leetcode : Two Sum
- 【leetcode】Two Sum
- [LeetCode]Two Sum
- leetcode Two Sum
- [Leetcode] Two Sum
- [leetcode] Two Sum
- LeetCode - Two Sum
- leetcode之Two Sum
- LeetCode | Two Sum
- 自己曾经做的项目
- ios 之 Bonjour 协议简单抓包分析
- Python道~安装bottle框架
- 简单工厂类
- hdu 4964 Emmet(模拟)
- 【leetCode】Two Sum
- java中的命名规范
- diff和patch简单明了的说明
- php面向对象之接口概念-133
- 曾经做的格斗编辑器
- 想成为程序猿?28个在线学习网站让你变身齐天大圣!
- Harvard公开课---创建动态网页
- Android windowmanager 制作悬浮窗口
- dojo小例子(26)ObjectStore onFetch方法获取记录总数