首页 > 代码库 > Two Sum
Two Sum
一、看到题后反应
不用搜下竟然可以做,结果超时。
思路很简单,数组之和找到另一个就可以了。
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))); } }
Two Sum
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。