HackerEarth 问题解决方案因输入测试用例而失败

ASh*_*ma7 5 java

下面 hackerearth qn 在编码 qns 之一中被问到

距离零最远

给定一个大小为 N 的整数数组 A。

任务 编写一个程序,打印距离 0 最远的元素。如果有多个元素,则打印值最小的数字。

输入格式

  • 第一行包含一个整数 N,表示数组 A 的大小。
  • 下一行包含 N 个整数,表示数组 A 的元素。

输出格式

打印距离 0 最远的元素。

输入示例1

5

1 2 3 4 5

样本输出1

5

我准备的解决方案:

public static farthestfromzero(int N, int [] Arr) {
    TreeSet<Integer> ts = new TreeSet<Integer>();
    for (int i=0; i<N; i++){
          ts.add(Arr[i]);
    } 
  return ts.last();
}
Run Code Online (Sandbox Code Playgroud)

:这个解决方案在最初的场景中对我有用,但是当我提交它时,它不起作用。

lie*_* wu 4

这是因为树集是按值排序的,因此数字可以是负数。所以...我想应该是这样的:

public static int farthestfromzero(int N, int [] Arr) {
    TreeSet<Integer> ts = new TreeSet<Integer>();
    for (int i=0; i<N; i++){
          ts.add(Arr[i]);
    } 
  int maxV = ts.last();
  int minV = ts.first();
  
  if(Math.abs(minV) >= maxV){
      return minV;
  }
  return maxV;

}
Run Code Online (Sandbox Code Playgroud)

另外,如果内存超出,请尝试以下操作:

    public static int farthestfromzero(int N, int [] Arr) {//You don't really need to store every elements
        int best = 0;
        
        for(int i = 0;i<N;i++) {
            if(Math.abs(Arr[i]) > Math.abs(best)) {
                best = Arr[i];
            }else if(Math.abs(best) == Math.abs(Arr[i]) && best > Arr[i]) {
                best = Arr[i];
            }
        }
        return best;    
    }
Run Code Online (Sandbox Code Playgroud)