1. 两数之和
题目:
给定一个整数数组nums和一个目标值target,请你在数组中找出和为目标值的那两个整数,并返回他们的数组的数组下标。
(可假定每种输出只会对应一个答案,但是不能重复利用这个数组中相同的元素)
示例:
给定 nums = [ 2, 7, 11,15 ] , target = 9
因为 nums [ 0 ] +nums [ 1 ] = 2 + 7 = 9
所以返回 [ 0, 1 ]
思路:
- 依次遍历求解
时间复杂度:O(n²)
空间复杂度:O(1) - 利用减法查找
已知减数target 和被减数 nums[ i ] ,将其差值在数组中遍历查找,且不能为被减数
代码实现:
- 依次遍历求解
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] a=new int[2];
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]==target){
a[0]=i;
a[1]=j;
return a;
}
}
}
return null;
}
}
- 利用减法查找
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] a=new int[2];
int x;
for(int i=0;i<nums.length;i++){
x=isinclude(target-nums[i],nums,i);
if(x!=-1){
a[0]=i;
a[1]=x;
return a;
}
}
throw new IllegalArgumentException("不存在");
}
public int isinclude(int a,int[] nums,int ii){
for(int i=0;i<nums.length;i++){
if(a==nums[i]&&i!=ii){
return i;
}
}
return -1;
}
}