[Leetcode]1. Two Sum

来源:互联网 发布:芜湖广电网络客服电话 编辑:程序博客网 时间:2024/05/23 21:46

https://leetcode.com/problems/two-sum/#/description


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, and you may not use thesame element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].题目翻译:输入一个整形数组,并指定一个整形target,从数组中找出相加等于target的2个元素并返回它们的index。假设每个输入有且只有一个解,且不能重复使用同一个元素。条件:1. 每次输入假设只有1个确定的答案2. 并没有说明数组是有序的强制解决方案:1. 从数组中第一个数开始(N),相继与后面每一位元素相加,直到遍历到最后一个元素,作为一轮2. 每轮从N+1开始,直到N<数组长度-2(最后结尾的2个元素)。
public class Solution {      public int[] twoSum(int[] nums, int target) {         if(nums.length < 2) return null;          for(int first=0;first<nums.length-1;first++){                          int second = first+1;             for(;second<nums.length;second++){                 if(nums[first] + nums[second] == target){                     return new int[]{first, second};                 }             }                      }         return null;     } }


随后查看了示例解法,确实比较强势:
Approach #3 (One-pass Hash Table) [Accepted]public int[] twoSum(int[] nums, int target) {    Map<Integer, Integer> 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);    }    throw new IllegalArgumentException("No two sum solution");}


0 0