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"); }