下面 hackerearth qn 在编码 qns 之一中被问到
距离零最远
给定一个大小为 N 的整数数组 A。
任务 编写一个程序,打印距离 0 最远的元素。如果有多个元素,则打印值最小的数字。
输入格式
输出格式
打印距离 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)
问:这个解决方案在最初的场景中对我有用,但是当我提交它时,它不起作用。
这是因为树集是按值排序的,因此数字可以是负数。所以...我想应该是这样的:
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)