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

在数组中找到总和最接近零的一对

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

在数组中找到总和最接近零的一对

您可以检查每一对数字并找到最小和。
java代码:

public static void findPairWithMinSumBruteForce(int arr[]){    if(arr.length<2)        return;    // Suppose 1st two element has minimum sum    int minimumSum=arr[0]+arr[1];    int pair1stIndex=0;    int pair2ndIndex=1;    for (int i = 0; i < arr.length; i++) {        for (int j = i+1; j < arr.length; j++) { int tempSum=arr[i]+arr[j]; if(Math.abs(tempSum) < Math.abs(minimumSum)) {     pair1stIndex=i;     pair2ndIndex=j;     minimumSum=tempSum; }        }    }    System.out.println(" The pair whose sum is closest to zero : "+arr[pair1stIndex]+" "+ arr[pair2ndIndex]);}

解决方案2:
对数组进行排序。* 我们将维护两个索引,一个在开头(l=0),一个在结尾(r=n-1)
迭代直到 l < r* 计算 arr[l] + arr[r] 的总和* 如果 abs (sum) < abs (minSum),则更新最小和和对。* 如果 sum 小于 0,这意味着如果我们想找到接近 0 的 sum,请执行 r–* 如果 sum 大于 0,这意味着如果我们想找到接近 0 的 sum ,请执行 l++

java代码:

public static void findPairWithMinSum(int arr[]) {        // Sort the array, you can use any sorting algorithm to sort it        Arrays.sort(arr);        int sum=0;         int minimumSum = Integer.MAX_VALUE;        int n=arr.length;        if(n<0) return;        // left and right index variables        int l = 0, r = n-1;        // variables to keep track of the left and right index pair for minimumSum        int minLeft = l, minRight = n-1;        while(l < r)        { sum = arr[l] + arr[r];  if(Math.abs(sum) < Math.abs(minimumSum)) {     minimumSum = sum;     minLeft = l;     minRight = r; } if(sum < 0)     l++; else     r--;        }        System.out.println(" The pair whose sum is minimun : "+arr[minLeft]+" "+ arr[minRight]);    }

时间复杂度:O(NLogN)

查找总和最接近零的对的 Java 程序:

package org.arpit.java2blog;import java.util.Arrays;public class findPairClosestToZero {    public static void main(String[] args)    {        int array[]={1,30,-5,70,-8,20,-40,60};        findPairWithMinSumBruteForce(array);        findPairWithMinSum(array);    }    public static void  findPairWithMinSumBruteForce(int arr[])    {        if(arr.length<2) return;        // Suppose 1st two element has minimum sum        int minimumSum=arr[0]+arr[1];        int pair1stIndex=0;        int pair2ndIndex=1;        for (int i = 0; i < arr.length; i++) { for (int j = i+1; j < arr.length; j++) {     int tempSum=arr[i]+arr[j];     if(Math.abs(tempSum) < Math.abs(minimumSum))     {         pair1stIndex=i;         pair2ndIndex=j;         minimumSum=tempSum;     } }        }        System.out.println(" The pair whose sum is closest to zero using brute force method: "+arr[pair1stIndex]+" "+ arr[pair2ndIndex]);    }    public static void findPairWithMinSum(int arr[]) {        // Sort the array, you can use any sorting algorithm to sort it        Arrays.sort(arr);        int sum=0;         int minimumSum = Integer.MAX_VALUE;        int n=arr.length;        if(n<0) return;        // left and right index variables        int l = 0, r = n-1;        // variables to keep track of the left and right index pair for minimumSum        int minLeft = l, minRight = n-1;        while(l < r)        { sum = arr[l] + arr[r];  if(Math.abs(sum) < Math.abs(minimumSum)) {     minimumSum = sum;     minLeft = l;     minRight = r; } if(sum < 0)     l++; else     r--;        }        System.out.println(" The pair whose sum is minimun : "+arr[minLeft]+" "+ arr[minRight]);    }}

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

 The pair whose sum is closest to zero using brute force method: 1 -5 The pair whose sum is closest to zero : -5 1


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

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

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