标签:ar os sp for java 问题 bs ef as
不用搜下竟然可以做,结果超时。
思路很简单,数组之和找到另一个就可以了。
public int[] twoSum(int[] numbers, int target) { int result[]=new int[]{0,0,0}; for(int i=0;i<numbers.length;i++){ if(find(numbers,target-numbers[i])){ if(numbers[i]<target-numbers[i]){ result[1]=numbers[i]; result[2]=target-numbers[i]; }else{ result[2]=numbers[i]; result[1]=target-numbers[i]; } break; } } return result; } public boolean find(int []numbers,int num){ for(int i=0;i<numbers.length;i++){ if(num==numbers[i]) return true; } return false; }
感觉问题出在了,查找上,决定用下二分查找来
问题一大堆来了,首先要排序吧。
只能得到结果存在。
重新定位。
特殊情况处理。
插曲,数组赋值不会了。公用了一个地址。
上次那个二位数组的x,y不知道怎么得到。 呵呵下来
import java.util.Arrays; /** * 找一个和来 数字组成的 */ public class TwoSum { public int[] twoSum(int[] numbers, int target) { int result[]=new int[]{0,0}; int temp[]=new int[numbers.length]; System.arraycopy(numbers, 0, temp, 0, numbers.length); Arrays.sort(numbers); for(int i=0;i<numbers.length;i++){ int find=binarySearch(numbers,0,target-numbers[i]); if(find!=-1){ result[0]=numbers[i]; result[1]=target-numbers[i]; break; } } if(result[0]!=result[1]){ result[0]=find(temp,0,result[0])+1; result[1]=find(temp,0,result[1])+1; }else{ result[0]=find(temp,0,result[0])+1; result[1]=find(temp,result[0],result[1])+1; } if(result[0]>result[1]){ result[0]=result[0]+result[1]; result[1]=result[0]-result[1]; result[0]=result[0]-result[1]; } return result; } public int find(int []numbers,int n,int num){ for(int i=n;i<numbers.length;i++){ if(num==numbers[i]) return i; } return -1; } /** * 二分查找来 */ public int binarySearch(int[]array,int n,int value){ int left=n; int right=array.length-1; while(left<=right){ int middle=left+(right-left)/2; if(array[middle]>value){ right=middle-1; }else if(array[middle]<value){ left=middle+1; }else{ return middle; } } return -1; } public static void main(String[] args) { TwoSum ts=new TwoSum(); System.out.println(Arrays.toString(ts.twoSum(new int[]{0,4,3,0}, 0))); } }
标签:ar os sp for java 问题 bs ef as
原文地址:http://my.oschina.net/findurl/blog/355984