牛客上的题目
题目描述
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2
示例1
输入
复制
[3,2,4],6
返回值
复制
[2,3]
思路
复制数组
排序
前后两指针
相加大于target后面的指针前移一位
相加小于target前面的指针后移一位
最后用for循环原来的数组判断两个指针指向的数字对应的原下标
暂时没有想到更好的办法
代码
import java.util.Arrays;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
int[] ans = new int[2];
int index1 = 0;
int index2 = numbers.length-1;
int[] arr = Arrays.copyOf(numbers,numbers.length);
Arrays.sort(numbers);
while (index1<index2){
if(numbers[index1] + numbers[index2]==target){
break;
}else if(numbers[index1] + numbers[index2] > target){
index2 --;
}else {
index1 ++;
}
}
int index = 0;
for(int i = 0;i<arr.length;i++){
if(arr[i] == numbers[index1] || arr[i] == numbers[index2]){
ans[index++] = i+1;
}
if(index == 2) break;
}
if(ans[0]>ans[1]){
int temp = ans[0];
ans[0] = ans[1];
ans[1] = temp;
}
return ans;
}
}