zoukankan      html  css  js  c++  java
  • 剑指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

  • 相关阅读:
    让textarea完全显示文章并且不滚动、不可拖拽、不可编辑
    解决css3毛玻璃效果(blur)有白边问题
    mysql_binlog恢复
    SED_AWK_正则
    进程;线程
    网络编程
    面向对象
    python_递归_协程函数(yield关键字)_匿名函数_模块
    Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数
    python_字符_函数
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7658794.html
Copyright © 2011-2022 走看看