zoukankan      html  css  js  c++  java
  • 剑指Offer42:和为S的两个数字(java)

    参考牛客“马客(Mark)”的解答:https://www.nowcoder.com/questionTerminal/390da4f7a00f44bea7c2f3d19491311b?f=discussion

    思路分析:

    设两个指针l,r指向数组左右两端,向中间夹逼寻找。因为和一定的情况下相差越远,乘积越小,所以当第一次array[l]+array[r]等于sum时即可。

    题目描述:

    输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
    相差越远乘积越小:设和为常量a,一个数为x,另一个数为a-x。乘积y可表示为y=x(a-x),进一步可配成y=-((x-a/2)^{2})+(a^{2})/4 画出图像可得出,函数先升后降,在x=a/2时取乘积最大值,因此x与a-x相差越大,乘积越小。

    Java代码:

    import java.util.ArrayList;
    public class Solution {
        public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
            int l =0;
            int r =array.length-1;
            ArrayList<Integer> result =new ArrayList<Integer>();
            if(array==null||array.length<2){
                return result;
            }
            while(l<r){
                int temp=array[l]+array[r];
                if(temp==sum){
                   result.add(array[l]);
                   result.add(array[r]);
                   break;
                }
                else if(temp<sum){
                    l++;
                }
                else{
                    r--;
                }
            }
            return result;
        }
    }
    
  • 相关阅读:
    IfcDirection
    IfcPcurve
    IfcOffsetCurve3D
    IfcOffsetCurve2D
    IfcLine
    IfcEllipse
    IfcCircle
    IfcConic
    IfcTrimmedCurve
    QDockWidget设置为tab切换形式
  • 原文地址:https://www.cnblogs.com/dongmm031/p/12251958.html
Copyright © 2011-2022 走看看