Qn: Write a java program to find Nth maximum number and Nth minimum number in an array without any sorting
-By Srishti, Last Update On 22nd May,2019 12:34 am

Nth Maximum number in an array

முதலில் நாம் array-ல் உள்ள அனைத்து element-களிலும் மிகச்சிறிய(min) மற்றும் மிகப்பெரிய(max) number-ஐ கண்டறியவேண்டும். அதனை கொண்டுதான் அடுத்த maximum number-ஐ கண்டறியமுடியும்.

int arr[]={8,1,7,2,4,3,6,5};
for (int i=0;i<arr.length;i++){
  if (arr[i] < min) {
      min = arr[i];
  }
  if (arr[i] > max) {
      max = arr[i];
  }
}

மேற்கண்டவற்றில் loop முடியும்போது array-ல் உள்ள min மற்றும் max number கிடைத்துவிடும். இப்பொழுது first max number-ஐ print செய்வது என்றல் நேரடியாக கண்டுபிடிக்கப்பட்டுள்ள max value-ஐ print செய்துவிடலாம்.

if (n == 1) {// 1st maximum number only
  System.out.println("Maximum number is "+max);
} else {....}

ஆனால் 2-வது 3-வது... பெரிய(max) number-ஐ print செய்யவேண்டுமெனில். அதற்க்கு அடுத்தடுத்த பெரிய number-களை கண்டறியவேண்டும்.

for (int t=2;t<=n; t++){
  int nextmax =min ;
  for (int i = 0; i < arr.length; i++){
    if (arr[i]<max && arr[i]>nextmax){
        nextmax=arr[i];
    }
  }
 max = nextmax;
}
System.out.println("Maximum number is "+max);

அடுத்த 2-வது max number. அதாவது முதல் max number-ஐ விட சிறியதாக இருக்கவேண்டும். ஆனால் மற்ற number-களை விட பெரியதாக இருக்க வேண்டும். இதை கண்டறிய மேற்கண்டவாறு loop-ஐ பயன்படுத்த வேண்டும். பிறகு loop-ல் arr[i]<max&&arr[i]>nextmax condition apply செய்யவேண்டும். இவ்வாறு அடுத்தடுத்த maximum number-ஐ கண்டு பிடிக்கும்போது max=nextmax என இடமாற்றம் செய்துகொள்ளவேண்டும்.

Complete program

import java.util.Scanner;
public class Find_nth_Maximum {
public static void main(String[] args) {
    int arr[]={8,1,7,2,4,3,6,5};
    Scanner sn=new Scanner(System.in);
    System.out.print("Enter n-th value: ");
    int n=sn.nextInt();
   if (n>0 && n<=arr.length) {
        int min = arr[0];
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        // "min" is smallest number in array
        // "max" is largest numner in array
        if (n == 1) {
            // if 1st maximum means largest number 
            // we've find already
            System.out.println("Maximum number is "+max);
        } else {
            for (int t = 2; t <= n; t++) {
                int nextmax =min ;
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i]<max && arr[i]>nextmax) {
                        nextmax=arr[i];
                    }
                }
                max = nextmax;
            }
            System.out.println("Maximum number is "+max);
        }
    } else {
        System.out.println("Array has only "+arr.length+" elements. Please enter 1-"+arr.length);
    }
}
}
Output:
Enter n-th value: 3
Maxmimum number is 6

// checked another output
Enter n-th value: 9
Array has only 8 elements. Please enter 1-8

Nth Minimum number in an array

அடுத்தடுத்த minimum number-ஐ கண்டறிய கீழ்க்கண்டவாறு loop-ஐ பயன்படுத்த வேண்டும். அதாவது min number-ஐ விட பெரிய number-ஆக இருக்கவேண்டும். ஆனால் மற்ற number-களை விட சிறியதாக இருக்கவேண்டும். இதுவே அடுத்தடுத்த min number-களை கண்டறியும் logic.
i.e if(arr[i] > min && arr[i] < nextmin)

for (int t = 2; t <= n; t++) {
  int nextmin = max;
  for (int i = 0; i < arr.length; i++) {
      if (arr[i] > min && arr[i] < nextmin) {
          nextmin = arr[i];
      }
  }
  min = nextmin;
}
System.out.println("Minimum number is "+min);

Complete program

import java.util.Scanner;
public class Find_nth_Minimum {
public static void main(String[] args) {
    int arr[] = {3,0, 12, 41, 11, 5, 6};
    Scanner sn = new Scanner(System.in);
    System.out.print("Enter n-th value: ");
    int n = sn.nextInt();
    if (n > 0 && n <= arr.length) {
        int max = arr[0];
        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        // "min" is smallest number in array
        // "max" is largest numner in array
        if (n == 1) {
            // if 1st minimum means smallest number 
            // we've find already
            System.out.println("Minimum number is "+min);
        } else {
            for (int t = 2; t <= n; t++) {
                int nextmin = max;
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] > min && arr[i] < nextmin) {
                        nextmin = arr[i];
                    }
                }
                min = nextmin;
            }
            System.out.println("Minimum number is "+min);
        }
    } else {
        System.out.println("Array has only " + arr.length + " elements. Please enter 1-"+arr.length);
    }
}
}
Output:
Enter n-th value: 3
Minimum number is 5

// checked another output
Enter n-th value: 9
Array has only 7 elements. Please enter 1-7

Pgcomments

Comments