问题 :
给定 +ve 和 -ve 整数数组,我们需要在数组中找到总和接近零的一对。
例如:
array[]={1,3,-5,7,8,20,-40,6};
The pair whose sum is closest to zero : -5 and 6
您可以检查每一对数字并找到最小和。
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 abs(sum) is less than min sum, we need to update sum and pair */
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 abs(sum) is less than min sum, we need to update sum and pair */
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
问题内容: 给定一个已排序的数组,我们需要在 Array 中找到一个总和接近于数字 X 的对。 例如: 问题答案: 解决方案1: 您可以检查每对数字并找到接近 X 的总和。 Java 代码: 解决方案2: 我们将维护两个索引,一个在开头,一个在结尾 * 迭代直到 * 将差异计算为 * 如果 然后更新最小总和和对。 * 如果 小于 X,这意味着如果我们想找到接近 X 的和,做 r– * 如果 大于
我正在尝试自动查找一个数字与另一个数字的最接近因子; 示例: 700到30的最接近因子是28(30不等于700,但28等于700)。 一个显而易见的解决方案就是得到700的所有因子,并做一个简单的距离计算,找到离30最近的因子,但这似乎是低效的。 另一种解决方案是找到所有基本质因数,例如: 将这些数字相乘得到所有的组合,从而找到最接近的。 我正在尝试对其进行编程,使其自动化。有更好的解决方案吗?
问题内容: 是否有numpy-thonic方法(例如函数)在数组中查找最接近的值? 例: 问题答案:
问题内容: 我想知道是否有可能找到一个最接近的元素的元素 ,是不是 在那里。 例如,如果我们具有[1,3,6,7]值,并且正在寻找最接近4的元素,则它应返回3,因为3是数组中的最大数字,小于4。 我希望这是有道理的,因为英语不是我的母语。 问题答案: 如果数组已排序,则可以在以下位置进行修改的二进制搜索:
我知道这是一个背包问题,其中权重和值相等,但我认为我在编码逻辑上犯了一个错误,因为即使对于数组中元素的数量(N)为50并且所需的最大总和(M)4500。 为了澄清这个问题,我们得到了一个由N个正整数和一个正整数M组成的数组。数组元素只能使用一次。我们必须找到这个数组的子集(不一定是连续的),使得总和最接近M,但不超过它。 这是我使用动态编程的尝试: 那么在我的代码中是否有任何可能的优化可以帮助我降
问题内容: 我想在哈希图中搜索键,然后找到与该键最接近的键! 因此,基本上我想搜索一个long,如果地图中不存在该long,则找到与该long值最接近的匹配项!我怎样才能做到这一点!? 提前感谢 问题答案: 如果不迭代其所有键,就无法做到这一点。我假设这不是您想要的,所以这是一种使用的方法: