import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
//n*logn
public int[] twoSum (int[] numbers, int target) {
if(numbers == null || numbers.length==0) {
return null ;
}
int[] newArr = Arrays.copyOf(numbers,numbers.length) ;
quikS(newArr , 0 , newArr.length-1);
int s = 0 ;
int e = newArr.length-1 ;
int [] res = new int[2] ;
while(s < e) {
int t = newArr[s] + newArr[e] ;
if(t == target) {
res = findIndexByValue(numbers ,newArr[s],newArr[e]) ;
break ;
} else if(t > target) {
e -- ;
} else {
s ++ ;
}
}
return res ;
}
//按照值来查索引,并且去除重复的索引 n
public int[] findIndexByValue(int arr[] ,int value1 , int value2) {
int r1 = -1 ;
int r2 = -1 ;
for(int i = 0 ; i < arr.length ; i ++) {
if(arr[i] == value1) {
r1 = i ;
break ;
}
}
for(int i = 0 ; i < arr.length ; i ++) {
if(arr[i] == value2 && i != r1) {
r2 = i ;
break ;
}
}
int[] res = new int[2] ;
if(r1 > r2) {
res[0] = r2+1 ;
res[1] = r1+1 ;
} else {
res[0] = r1+1 ;
res[1] = r2+1 ;
}
return res ;
}
//快排nlogn
public void quikS(int[] arr , int start , int end) {
if(start > end) {
return ;
}
int s = start ;
int e = end ;
int t = arr[start] ;
while(s < e) {
while(s < e && arr[e] >= t) {
e -- ;
}
if(s < e) {
arr[s] = arr[e] ;
s ++ ;
}
while(s <e && arr[s] <= t) {
s ++ ;
}
if(s < e) {
arr[e] = arr[s] ;
e -- ;
}
}
arr[s] = t ;
quikS(arr,start,s-1) ;
quikS(arr,s+1,end) ;
}
}