Next Largest In Range Hackers Earth:
/*Given an array A(A0, A1…. An-1) of n integers. Your task is to find the smallest number larger than a given no.
X in the range [l,r] inclusive. Indexing is 0 based. If there is no greater no. than X in the specified range output -1.
For example: A=[1 2 3 8 15 6 7 1 8 7], l=1 and r=5
For X=1 answer should be 2 For X=2, answer should be 3 For X=5, answer should be 6 For X=20, answer should be -1.
Input
First line contains for integers n, l, r and Q, Q denotes no. of queries.
Next line contains n integers denoting array A.
In the next line, Q space separated integers are given each integer represents the value X for a query.
Output
Print the just largest no. for each query.
Constraints
1<=n<=1000 1<=A[i]<=10^5 1<=X<=10^5 1<=Q<=1000 0<=l, r<n*/
/*Sample input Sample Output
10 1 5 4 2
1 2 3 8 15 6 7 1 8 7 3
1 2 5 20 6
-1*/
Solution:
import java.util.*;
class TestClass
{
int[] n_Ary;
int[] range_Ary;
int l;
int r;
int q;
int n;
public static void main(String args[] ) throws Exception {
Scanner scan=new Scanner(System.in);
String line1=scan.nextLine().trim();
String line2=scan.nextLine().trim();
String line3=scan.nextLine().trim();
TestClass h4=new TestClass();
h4.readLine1Data(line1);
h4.readArray(line2);
h4.readRange(line3);
h4.checkLargestNumber(h4.l,h4.r,h4.range_Ary);
}
public void checkLargestNumber(int l2, int r2,int[] range_Ary) {
for (int i = 0; i <= r2; i++)
{
for (int j = i+1; j <=r2; j++)
{
if(!(n_Ary[i]<n_Ary[j]))
{
int temp=n_Ary[i];
n_Ary[i]=n_Ary[j];
n_Ary[j]=temp;
}
}
}
//printData(n_Ary) ; printData(range_Ary);
for (int i = 0; i <range_Ary.length; i++)
{
int output=0;
int range_Value=range_Ary[i];
for (int j = 0; j <= r2; j++)
{
if(range_Value<n_Ary[j])
{
output=n_Ary[j];
System.out.println(output);
break;
}
if(output==0 && j==r2)
{
output=-1;
System.out.println(output);
}
}
}
}
void readLine1Data(String line1)
{
String lin1[]=line1.split(" ");
n=Integer.parseInt(lin1[0]);
l=Integer.parseInt(lin1[1]);
r=Integer.parseInt(lin1[2]);
q=Integer.parseInt(lin1[3]);
n_Ary=new int[n];
}
void readArray(String line2)
{
String lin2[]=line2.split(" ");
for (int i = 0; i < lin2.length; i++) {
n_Ary[i]=Integer.parseInt(lin2[i]);
}
}
void readRange(String line3)
{
String lin3[]=line3.split(" ");
range_Ary=new int[lin3.length];
for (int i = 0; i < q; i++) {
range_Ary[i]=Integer.parseInt(lin3[i]);
}
}
}
Comments
Post a Comment