给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3,2,4], target = 6 输出:[1,2] 示例 3: 输入:nums = [3,3], target = 6 输出:[0,1] 提示: 2 <= nums.length <= 104 -109 <= nums[i] <= 109 -109 <= target <= 109 只会存在一个有效答案 进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?
解法2,3参照了官方解法twosum
以及菜鸟教程java数组篇
Pythonliast与java数组区别 https://blog.csdn.net/wu1226419614/article/details/80870120
关于hashmap数据类型
https://www.cnblogs.com/hello-yz/p/3712610.html
比较容易想到的方法是遍历数组中的所有数字,此种方法时间复杂度比较高O(n^2)
/** Java两数之和普通解法**/ class Solution { public int[] twoSum(int[] nums, int target) { int res [] = new int[2]; for(int i=0;i<nums.length;i++){ for(int j=i+1;j<nums.length;j++){ if(target-nums[i]-nums[j]==0){ res[0]=i; res[1]=j;
//return new int[] {i,j}; } } } return res; }
}
这里不作特别说明。只想提及的是关于return new int[] {i,j}的些许解释。这种写法是官方解读给出的。参考菜鸟教程关于数组的解释,可以知道这是函数输入参数或者充当返回值的一种方式。
同时,官方解法在类的最后会throw一个异常,若将其删除会报错,因为throw也是return的一种替代形式。(就是说即使这个类在开头就说了不是void的,要返回一个int[]或者其他的东西,但是在最后抛出一个异常语法上是符合的。)对于本例,执行着就会从if下的return离开程序,所以不会抛出异常的。
原文:https://www.cnblogs.com/chenxiaomeng/p/14995152.html