标签:
【题目】输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,
1 package com.exe9.offer; 2 3 /** 4 * 【题目】输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 5 * //如果有多对数字的和等于S,输出两个数的乘积最小的。 6 * @author WGS 7 * 8 */ 9 public class FindTwoNumberSum { 10 11 public boolean findTwoNumEqualS(int[] arr,int s){ 12 if(arr==null || arr.length<2) return false; 13 14 //方法一:简单的办法 时间复杂度O(n^2) 15 /*for(int i=0;i<arr.length;i++){ 16 int num=arr[i]; 17 for(int j=0;j<arr.length;j++){ 18 if(i!=j){ 19 num+=arr[j]; 20 if(num==s){ 21 return true; 22 } 23 else{ 24 num-=arr[j]; 25 } 26 } 27 28 29 } 30 }*/ 31 32 //方法二:双指针思想 33 int firstIndex=0; 34 int lastIndex=arr.length-1; 35 int sum=0; 36 37 while(firstIndex<lastIndex){ 38 sum=arr[firstIndex]+arr[lastIndex]; 39 40 if(sum==s){ 41 return true; 42 }else if(sum<s){ 43 firstIndex++; 44 }else{ 45 lastIndex--; 46 } 47 } 48 49 return false; 50 51 } 52 53 public static void main(String[] args) { 54 FindTwoNumberSum f=new FindTwoNumberSum(); 55 int[] array = new int[]{1,2}; 56 System.out.println(f.findTwoNumEqualS(array, 3)); 57 58 } 59 60 }
标签:
原文地址:http://www.cnblogs.com/noaman/p/5610411.html