剑指offer系列45---和为s的两个数字

Posted noaman_wgs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer系列45---和为s的两个数字相关的知识,希望对你有一定的参考价值。

【题目】输入一个递增排序的数组和一个数字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 }

 

以上是关于剑指offer系列45---和为s的两个数字的主要内容,如果未能解决你的问题,请参考以下文章

《剑指Offer——57.和为s的两个数字,58.翻转单词顺序》代码

剑指offer 42.和为S的两个数字

[剑指offer]面试题41:和为s的两个数字VS和为s的连续正数序列

[剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列

剑指offer 和为s的两个数字

剑指OFFER 和为S的两个数字