栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在java 中的Array 中找到总和最接近X 的对。

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在java 中的Array 中找到总和最接近X 的对。

解决方案1:
您可以检查每对数字并找到接近 X 的总和。
Java 代码:

public static void findPairWithClosestToXBruteForce(int arr[],int X){    if(arr.length<2)        return;    // Suppose 1st two element has minimum diff with X    int minimumDiff=Math.abs(arr[0]+arr[1]-X);    int pair1stIndex=0;    int pair2ndIndex=1;    for (int i = 0; i < arr.length; i++) {        for (int j = i+1; j < arr.length; j++) { int tempDiff=Math.abs(arr[i]+arr[j]-X); if(tempDiff< minimumDiff) {     pair1stIndex=i;     pair2ndIndex=j;     minimumDiff=tempDiff; }        }    }    System.out.println(" The pair whose sum is closest to X using brute force method: "+arr[pair1stIndex]+" "+ arr[pair2ndIndex]);}

解决方案2:
我们将维护两个索引,一个在开头

(l=0)
,一个在结尾
(r=n-1)
* 迭代直到
l < r
* 将差异计算为
arr[l] + arr[r]-x
* 如果
abs (diff) < minDiff
然后更新最小总和和对。* 如果
arr[l] + arr[r]
小于 X,这意味着如果我们想找到接近 X 的和,做 r–* 如果
arr[l] + arr[r]
大于 0,这意味着如果我们想找到接近 X 的总和,请执行
l++

java代码:

public static void findPairWithClosestToX(int arr[],int X) {    int minimumDiff = Integer.MAX_VALUE;    int n=arr.length;    if(n<0)        return;    // left and right index variables    int l = 0, r = n-1;    // variable to keep track of the left and right pair for minimumSum    int minLeft = l, minRight = n-1;    while(l < r)    {        int currentDiff= Math.abs(arr[l] + arr[r]-X);                if(currentDiff < minimumDiff)        { minimumDiff = currentDiff; minLeft = l; minRight = r;        }        if(arr[l] + arr[r] < X) l++;        else r--;    }    System.out.println(" The pair whose sum is closest to X : "+arr[minLeft]+" "+ arr[minRight]);}

时间复杂度:O(NLogN)

寻找总和最接近 X 的对的 Java 程序:

package org.arpit.java2blog;public class FindPairClosestToXMain {    public static void main(String[] args)    {        int array[]={-40,-5,1,3,6,7,8,20};        findPairWithClosestToXBruteForce(array,5);        findPairWithClosestToX(array,5);    }    public static void  findPairWithClosestToXBruteForce(int arr[],int X)    {        if(arr.length<2) return;        // Suppose 1st two element has minimum diff with X        int minimumDiff=Math.abs(arr[0]+arr[1]-X);        int pair1stIndex=0;        int pair2ndIndex=1;        for (int i = 0; i < arr.length; i++) { for (int j = i+1; j < arr.length; j++) {     int tempDiff=Math.abs(arr[i]+arr[j]-X);     if(tempDiff< minimumDiff)     {         pair1stIndex=i;         pair2ndIndex=j;         minimumDiff=tempDiff;     } }        }        System.out.println(" The pair whose sum is closest to X using brute force method: "+arr[pair1stIndex]+" "+ arr[pair2ndIndex]);    }    public static void findPairWithClosestToX(int arr[],int X) {        int minimumDiff = Integer.MAX_VALUE;        int n=arr.length;        if(n<0) return;        // left and right index variables        int l = 0, r = n-1;        // variable to keep track of the left and right pair for minimumSum        int minLeft = l, minRight = n-1;        while(l < r)        { int currentDiff= Math.abs(arr[l] + arr[r]-X);  if(currentDiff < minimumDiff) {     minimumDiff = currentDiff;     minLeft = l;     minRight = r; } if(arr[l] + arr[r] < X)     l++; else     r--;        }        System.out.println(" The pair whose sum is closest to X : "+arr[minLeft]+" "+ arr[minRight]);    }}

当你运行上面的程序时,你会得到以下输出:

   The pair whose sum is closest to X using brute force method: 1 3The pair whose sum is closest to X : 1 3


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/366366.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号