Coding Problem 1 : Picking Numbers [HackerRank - Problem Solving]
Problem : Picking Numbers
Given an array of integers, find the longest subarray where the absolute difference between any two elements is less than or equal to .
Example
There are two subarrays meeting the criterion: and . The maximum length subarray has elements.
Function Description
Complete the pickingNumbers function in the editor below.
pickingNumbers has the following parameter(s):
- int a[n]: an array of integers
Returns
- int: the length of the longest subarray that meets the criterion
Input Format
The first line contains a single integer , the size of the array .
The second line contains space-separated integers, each an .
Constraints
- The answer will be .
Sample Input 0
6
4 6 5 3 3 1
Sample Output 0
3
Explanation 0
We choose the following multiset of integers from the array: . Each pair in the multiset has an absolute difference (i.e., and ), so we print the number of chosen integers, , as our answer.
Sample Input 1
6
1 2 2 3 1 2
Sample Output 1
5
Explanation 1
We choose the following multiset of integers from the array: . Each pair in the multiset has an absolute difference (i.e., , , and ), so we print the number of chosen integers, , as our answer.
Solution :
package com.coding.problems.hackerrank;
import java.io.*;
import java.util.List;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toList;
class Result {
/*
* Complete the 'pickingNumbers' function below.
*
* The function is expected to return an INTEGER.
* The function accepts INTEGER_ARRAY a as parameter.
*
*/
public static int pickingNumbers(List<Integer> a) {
// Write your code here
int[] frequency = new int[101];
int result = Integer.MIN_VALUE;
for(int i=0; i<a.size();i++){
int value = a.get(i);
frequency[value] = frequency[value]+1;
}
for(int j=1;j<=100;j++){
result = Math.max(result, frequency[j] + frequency[j-1]);
}
return result;
}
}
public class PickingNumbers {
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<Integer> a = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(toList());
int result = Result.pickingNumbers(a);
System.out.println(result);
//bufferedWriter.write(String.valueOf(result));
//bufferedWriter.newLine();
bufferedReader.close();
//bufferedWriter.close();
}
}
Comments
Post a Comment