给定一个数组 和 一个指定的数 将 数组中两数之和等于给定的数的下标进行返回
无序数组
(1)暴力求解
public static int [] ontSolution(int [] nums,int target)
{
for (int i = 0; i < nums.length-1; i++) {
for(int j = i+1;j<nums.length;j++)
{
if(nums[i]+nums[j]==target)
{
return new int []{i,j};
}
}
}
return new int [0];
}
(2)使用map集合求解
public static int [] solution(int [] nums,int target)
{
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if(map.containsKey(target-nums[i]))
{
return new int[]{map.get(target-nums[i]),i};
}
else
map.put(nums[i],i);
}
return new int[0];
}
有序数组
(1)二分法求解
public static int [] trueSolution(int [] nums,int target)
{
for (int i = 0; i < nums.length; i++) {
int low = i+1,high = nums.length-1;
while(low<=high)
{
int mid = (low+high)/2;
if(nums[mid]==target-nums[i])
return new int [] {i,mid};
else if(nums[mid]>target-nums[i])
high = mid-1;
else low = mid+1;
}
}
return new int[0];
}
双指针法求解
public static int []reallySolution(int []nums,int target)
{
int low=0,high = nums.length-1;
while(low<=high)
{
int sum = nums[low]+nums[high];
if(sum==target)
return new int[]{low,high};
else if(sum>target)
high-=1;
else
low+=1;
}
return new int[0];
}