给定一个整数数组 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个索引,这个2个索引求和等于输入值。即(1):nums[i]+nums[j]=target
!不能存在相同的索引
于是我想到先将一个索引代入固定值,找另一个值。但会出现找不到另一个值使得(1)式子成立。因此让之前那个定值索引更换新的固定值。故想到了循环。分析发现if要套嵌。
于是我将nums[i]作为定值。让nums[j],循环。等nums[j]循环完找不到值,让nums[i]进行一次循环。
因此有如下代码
//引用幻天阙
public int[] twoSum (int[] nums, int target){//首先方法是数组类型的,因为要返回的是数组类型。两个参数也是对应的写好,符合写程序的思路
class Solution {
public int[] twoSum(int[] nums, int target) {
int[]arr=new int[2];
for(int i=0;i<=nums.length-1;i++){
for(int j=i+1;j<=nums.length-1;j++){
if(nums[i]+nums[j]==target && i!=j){
arr[0]=i;
arr[1]=j;
return arr ;
}//else{
//continue;
//}
}
}
return arr ;
}
}
时间复杂度O(n2)
暴力穷尽“每个组合”(实际上是这样的,但有组合重复,可以不列举出来,缩短时间)
牢记,fori=for(int i = 0;i<n;i++){}
!!!(int i = 0)