题目
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
UPDATE (2016/2/13):
The return format had been changed to zero-based indices. Please read the above updated description carefully.
以前用c++刷的:http://blog.csdn.net/le119126/article/details/45371449?locationNum=1
现在java重刷,只想到了排序后,两指针从首尾逼近的,hash的方式没给忘了
不能new 一个数据组来存ValuIndex,nums大的时候,new数据组会超时,所以这里用ArrayList 一个一个加
public class Solution {
public class ValueIndex implements Comparable{
int value;
int index;
public ValueIndex(int value,int index)
{
this.value = value;
this.index = index;
}
public int compareTo(Object o) {
int rh=((ValueIndex)o).value;
return value -rh ;
}
}
public int[] twoSum(int[] nums, int target) {
ArrayList<ValueIndex> arr=new ArrayList<ValueIndex>();
for(int i=0;i<nums.length;i++){
arr.add(new ValueIndex(nums[i],i));
}
Collections.sort(arr);
int i=0;
int j=nums.length-1;
while(i<j){
int tmp=arr.get(i).value+arr.get(j).value;
if(tmp==target){
return new int[]{arr.get(i).index,arr.get(j).index};
}
else if(tmp<target){
i++;
}
else{
j--;
}
}
return null;
}
}
java 排序接口
1.实现Comparable接口,并覆盖compareTo(object ob)方法
2.实现Comparator接口,并覆盖compare(object lo,object ro)方法
集合排序
Collections.sort(arr, new MyComparatorIMP()); //MyComparatorIMP 继承Comparator
或者 Collections.sort(arr); arr实现Comparable 就不需要new MyComparatorIMP()了
数组排序: Arrays.sort(arr);