寻找最接近 0 的数字

新手上路,请多包涵

我有一个整数数组,我需要找到最接近零的整数(正整数优先于负整数。)

这是我到目前为止的代码:

 public class CloseToZero {
    public static void main(String[] args) {
        int[] data = {2,3,-2};
        int curr = 0;
        int near = data[0];
        // find the element nearest to zero
        for ( int i=0; i < data.length; i++ ){
            curr = data[i] * data[i];
            if ( curr <= (near * near) )  {
                near = data[i];
            }
        }
        System.out.println( near );
    }
}

目前我得到-2的结果,但我应该得到2。我做错了什么?

原文由 user3172930 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 917
2 个回答

对数组进行排序(添加一行代码),如果为具有相同距离的正数和负数选择相同的绝对值,则您选择的最后一个数字将为正数。

源代码:

 import java.util.Arrays;

public class CloseToZero {

    public static void main(String[] args) {

        int[] data = {2,3,-2};
        int curr = 0;
        int near = data[0];
        Arrays.sort(data);      //  add this
        System.out.println(Arrays.toString(data));
        // find the element nearest to zero
        for ( int i=0; i < data.length; i++ ){
            System.out.println("dist from " + data[i] + " = " + Math.abs(0 -data[i]));
            curr = data[i] * data[i];
            if ( curr <= (near * near) )  {
                near = data[i];
            }
        }
        System.out.println( near );
    }
}

原文由 JuanZe 发布,翻译遵循 CC BY-SA 4.0 许可协议

这将在 O(n) 时间完成:

 int[] arr = {1,4,5,6,7,-1};

int closestIndex = 0;
int diff = Integer.MAX_VALUE;
for (int i = 0; i < arr.length; ++i) {
    int abs = Math.abs(arr[i]);
    if (abs < diff) {
        closestIndex = i;
        diff = abs;
    } else if (abs == diff && arr[i] > 0 && arr[closestIndex] < 0) {
        //same distance to zero but positive
        closestIndex =i;
    }
}
System.out.println(arr[closestIndex ]);

原文由 kmera 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题