• 剑指offer四十二之和为S的两个数字


    一、题目

      输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

    二、思路

      数列满足递增,设两个头尾两个指针i和j,若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j --;

           若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 后面的数已是不可能),i ++;

           若ai + aj == sum,就是答案(相差越远乘积越小)。

    三、代码

    /*数列满足递增,设两个头尾两个指针i和j,
      若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j -= 1
      若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 后面的数已是不可能),i += 1
      若ai + aj == sum,就是答案(相差越远乘积越小)
        */
    
    import java.util.ArrayList;
    
    public class Solution {
        public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {
    
            ArrayList<Integer> arrayList = new ArrayList<Integer>();
            int i = 0;
            int j = array.length - 1;
    
            while (i<j && array[i] + array[j] > sum){
                j--;
            }
    
            while (i<j && array[i] + array[j] < sum){
                i++;
            }
    
            if(i < j && array[i] + array[j] == sum ) {
                    arrayList.add(array[i]);
                    arrayList.add(array[j]);
            }
    
            return arrayList;
        }
    }
    View Code

    ---------------------------------------------

    参考链接:

    https://www.nowcoder.com/questionTerminal/390da4f7a00f44bea7c2f3d19491311b

  • 相关阅读:
    我的MSDN WEBCAST学习
    【EXCEL】数据制作技巧
    水晶报表分页实现方法 [转]
    注册Active Reports 去除红线
    随机文件文件的操作
    利用Visual Basic命令操作文件
    Crystal 语法概述[转]
    [转].NET面试题集
    表之间的连接关系
    php记录百度和google蜘蛛爬行程序代码日志
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7658794.html
Copyright © 2020-2023  润新知