Below hackerearth qn has been asked in one of coding qns
Farthest from zero
You are given an integer array A of size N.
Task Write a program to print the farthest element from 0. If there are multiple elements, print the number with the least value.
Input format
Output format
Print the farthest element from 0.
Sample input 1
5
1 2 3 4 5
Sample Output1
5
Solution prepared by me:
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();
}
Ask: This solution worked for me for the initial scenario, but when I submitted it , it didn't worked.
Your algorithm does not account for negative integers.
Consider this array:
[-10, 7, 5, 1]
Which number is furthest from zero?
Which will your algorithm pick?
Also note, this requirement:
If there are multiple elements, print the number with the least value.
So, from an array like this:
[-10, 1, 2 ,10]
You need to pick -10, and not 10.
That is because the tree set is sorted by the values, the number can be begtive. So... I think it should be this:
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;
}
Also if it's memory exceed, then try this:
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;
}
Here is my answer. I just wrote the core logic. Please add the basic condition check. Also, I did it in Python3. Commented code the expansion of the below single line code.
A1 = sorted(A)
print(A1[0]) if (abs(A1[0])> abs(A1[-1])) else print(A1[-1]) if (abs(A1[0]) < abs(A1[-1])) else print(A1[0])
# if (abs(A1[0])== abs(A1[-1])):
# print(A1[0])
# else:
# if(abs(A1[0]) > abs(A1[-1])):
# print(A1[0])
# else:
# print(A1[-1])