Solve HackerRank Minimum Loss 1

Solve HackerRank Minimum Loss 1 in Java

Artemis
Geek Culture

--

Photo by Yancy Min on Unsplash

This should be a simple problem, but finding a correct solution online seems challenging. So I’d like to solve it using O(n²) and the optimized O(nlogn) solution.

Problem

Lauren has a chart of distinct projected prices for a house over the next several years. She must buy the house in one year and sell it in another, and she must do so at a loss. She wants to minimize her financial loss.

Example

price = [20, 15, 8, 2, 12]

Her minimum loss is incurred by purchasing in year 2 at 15 and reselling in year 5 at 12. Return 3.

Function Description

Complete the minimumLoss function in the editor below.

minimumLoss has the following parameter(s):

  • int price[n]: home prices at each year

Returns

  • int: the minimum loss possible

HackerRank original problem below:

Solution

The common mistake is to sort the price array and then find the minimum. We need to keep the original order to find the minimal value.

Solution 1: Keep it simple and use O(n²)

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

class Result {

/*
* Complete the 'minimumLoss' function below.
*
* The function is expected to return an INTEGER.
* The function accepts LONG_INTEGER_ARRAY price as parameter.
*/

public static long minimumLoss(List<Long> price) {
// Write your code here
long min = Long.MAX_VALUE;
for (int i = 0; i < price.size(); i++) {
for (int j = i + 1; j < price.size(); j++) {
if (price.get(i) >= price.get(j) && price.get(i) - price.get(j) < min)
min = price.get(i) - price.get(j);
}
}

return min;
}

}

public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

int n = Integer.parseInt(bufferedReader.readLine().trim());

List<Long> price = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Long::parseLong)
.collect(toList());

long result = Result.minimumLoss(price);

bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();

bufferedReader.close();
bufferedWriter.close();
}
}

Solution 2: Optimize it for O(nlogn)

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

class Result {

/*
* Complete the 'minimumLoss' function below.
*
* The function is expected to return an INTEGER.
* The function accepts LONG_INTEGER_ARRAY price as parameter.
*/

public static long minimumLoss(List<Long> price) {

TreeSet<Long> priceSet = new TreeSet<>();
long min = Long.MAX_VALUE;
for (int i = 0; i < price.size(); i++) {
Long higher = priceSet.higher(price.get(i));
if (higher != null) {
min = Math.min(higher - price.get(i), min);
}
priceSet.add(price.get(i));
}

return min;
}

}

public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

int n = Integer.parseInt(bufferedReader.readLine().trim());

List<Long> price = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Long::parseLong)
.collect(toList());

long result = Result.minimumLoss(price);

bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();

bufferedReader.close();
bufferedWriter.close();
}
}

It can 100% pass all test cases.

Happy coding!

Questions, ideas? Leave comments here. Follow me to be part of the fun problem-solving journey.

--

--