Java Priority Queue
Java Priority Queue
+ 0 comments import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.PriorityQueue;
/* * Create the Student and Priorities classes here. */
class Student implements Comparable{ private int id; private String name; private double cgpa;
public Student(int id, String name, double cgpa) { this.id = id; this.name = name; this.cgpa = cgpa; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getCgpa() { return cgpa; } public void setCgpa(double cgpa) { this.cgpa = cgpa; } public int compareTo(Student o){ if (o.cgpa==this.cgpa && o.name==this.name){ return Integer.compare(o.id,this.id); }else if (o.cgpa==this.cgpa){ return this.name.compareTo(o.name); }else { return Double.compare( o.cgpa,this.cgpa); } }
}
class Priorities {
public List<Student> getStudents(List<String> events) { PriorityQueue <Student> queue = new PriorityQueue<>(); for (String event: events) { Scanner scanner= new Scanner(event); String command= scanner.next(); switch (command){ case "ENTER": String name=scanner.next(); Double cgpa=scanner.nextDouble(); int id=scanner.nextInt(); Student student1= new Student(id,name,cgpa); queue.add(student1); break; case "SERVED": queue.poll(); break; } } List<Student> studentList = new ArrayList<>(); while (!queue.isEmpty()){ studentList.add(queue.poll()); } return studentList; }
}
public class Solution { private final static Scanner scan = new Scanner(System.in); private final static Priorities priorities = new Priorities();
public static void main(String[] args) { int totalEvents = Integer.parseInt(scan.nextLine()); List<String> events = new ArrayList<>(); while (totalEvents-- != 0) { String event = scan.nextLine(); events.add(event); } List<Student> students = priorities.getStudents(events); if (students.isEmpty()) { System.out.println("EMPTY"); } else { for (Student st: students) { System.out.println(st.getName()); } } }
}
+ 0 comments import java.util.Comparator; import java.util.PriorityQueue; class Student { private final int id; private final String name; private final double cgpa; public Student(int id, String name, double cgpa) { this.id = id; this.name = name; this.cgpa = cgpa; } public String getName() { return name; } public double getCgpa() { return cgpa; } public int getId() { return id; } } class Priorities { private static final String SERVED = "SERVED"; public List<Student> getStudents(List<String> events) { PriorityQueue<Student> priority = getPriorityQueue(events); for (String s : events) { String[] t = s.split(" "); String event = t[0]; if (event.equals(SERVED)) { priority.poll(); continue; } String name = t[1]; double cgpa = Double.parseDouble(t[2]); int id = Integer.parseInt(t[3]); Student student = new Student(id, name, cgpa); priority.add(student); } List<Student> students = new ArrayList<>(); while (!priority.isEmpty()) { students.add(priority.poll()); } return students; } private static PriorityQueue<Student> getPriorityQueue(List<String> events) { int size = events.size(); Comparator<Student> pqComparator = new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { return s1.getCgpa() != s2.getCgpa() ? Double.compare(s2.getCgpa(), s1.getCgpa()) : !s1.getName().equals(s2.getName()) ? s1.getName().compareTo(s2.getName()) : Integer.compare(s1.getId(), s2.getId()); } }; return new PriorityQueue<>(size, pqComparator); } }
+ 0 comments import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Queue; import java.util.PriorityQueue; class Student implements Comparable<Student>{ private String name; private int id; private double cgpa; Student(int id, String name, double cgpa){ this.id = id; this.name = name; this.cgpa = cgpa; } public int getId() { return id; } public double getCGPA() { return cgpa; } public String getName() { return name; } @Override public String toString(){ return "name: " + name + ", id: " + id + ", cgpa: " + cgpa; } @Override public int compareTo(Student o){ int cgpaCompare = Double.compare(o.cgpa, cgpa); if(cgpaCompare == 0){ int nameCompare = name.compareTo(o.name); if(nameCompare == 0) return Integer.compare(o.id, id); return nameCompare; } return cgpaCompare; } } class Priorities{ private Queue<Student> queue = new PriorityQueue<>(); public List<Student> getStudents(List<String> events){ List<Student> list = new ArrayList<>(); for(String event: events){ String[] array = event.split(" "); String action = array[0]; String name = ""; double cgpa = 0; int id = 0; if(array.length > 1){ name = array[1]; cgpa = Double.valueOf(array[2]); id = Integer.valueOf(array[3]); } Student student = new Student(id, name, cgpa); if(action.equals("ENTER")) { addStudent(student); }else{ queue.poll(); } } while(queue.size() > 0){ list.add(queue.poll()); } return list; } private void addStudent(Student student) { queue.add(student); } } public class Solution { private final static Scanner scan = new Scanner(System.in); private final static Priorities priorities = new Priorities(); public static void main(String[] args) { int totalEvents = Integer.parseInt(scan.nextLine()); List<String> events = new ArrayList<>(); while (totalEvents-- != 0) { String event = scan.nextLine(); events.add(event); } List<Student> students = priorities.getStudents(events); if (students.isEmpty()) { System.out.println("EMPTY"); } else { for (Student st: students) { System.out.println(st.getName()); } } } }
+ 0 comments I think we may optimize little more
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.StringTokenizer; import java.util.PriorityQueue; import java.util.Comparator; class Student { private int id; private String name; private double cgpa; Student(int id, String name, double cgpa) { this.id = id; this.name = name; this.cgpa = cgpa; } Student(String name, double cgpa, int id) { this(id, name, cgpa); } public int getID() { return id; } public String getName() { return name; } public double getCGPA() { return cgpa; } } class MyComparator implements Comparator<Student> { public int compare(Student s1, Student s2) { if (s1.getCGPA() == s2.getCGPA()) { if (s1.getName().equals(s2.getName())) { return s1.getID() - s2.getID(); } return s1.getName().compareTo(s2.getName()); } return s1.getCGPA() > s2.getCGPA() ? -1 : 1; } } class Priorities { public List<Student> getStudents(List<String> events) { List<Student> students = new ArrayList<>(); boolean sorted = false; for (String event : events) { StringTokenizer st = new StringTokenizer(event); switch(st.nextToken()) { case "ENTER": students.add(new Student(st.nextToken(), Double.parseDouble(st.nextToken()), Integer.parseInt(st.nextToken()))); sorted = false; break; case "SERVED": if (!sorted && students.size() > 1) { students.sort(new MyComparator()); sorted = true; } if (!students.isEmpty()) { students.remove(0); } break; } } return students; } } public class Solution { private final static Scanner scan = new Scanner(System.in); private final static Priorities priorities = new Priorities(); public static void main(String[] args) { int totalEvents = Integer.parseInt(scan.nextLine()); List<String> events = new ArrayList<>(); while (totalEvents-- != 0) { String event = scan.nextLine(); events.add(event); } List<Student> students = priorities.getStudents(events); if (students.isEmpty()) { System.out.println("EMPTY"); } else { for (Student st: students) { System.out.println(st.getName()); } } } }
+ 0 comments I've been exploring Java Priority Queues lately, and they're as efficient as a well-trained confinement nanny singapore! Just like a nanny ensures a baby's needs are met in the right order, Priority Queues prioritize elements flawlessly. They're a must-learn for any Java enthusiast
Sort 241 Discussions, By:
Please Login in order to post a comment