會場安排問題(貪心演算法) Comparator類排序的學習
阿新 • • 發佈:2018-11-23
主要是學習類如何進行排序利用 arrays 嗯 還有反正就是陣列排序的學習
程式碼:
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.Arrays; import java.util.Scanner; import java.util.Comparator; class node{ public int beginn , endd; node(){} node(int x,int y){ beginn = x; endd = y; } } public class Main { private static Scanner sc; public static void main(String[] args)throws FileNotFoundException{ try { sc = new Scanner(new FileInputStream("E:\\input.txt")); int n = sc.nextInt(); node s[] = new node[n + 1]; for(int i = 1; i <= n; i++) { s[i] = new node(); s[i].beginn = sc.nextInt(); s[i].endd = sc.nextInt(); } Comparator<node> cmp = new Comparator<node>(){ @Override public int compare(node o1, node o2) { if(o1.endd != o2.endd) return o1.endd - o2.endd; //從小到大 else return o1.beginn - o2.beginn; //從小到大 } }; Arrays.sort(s, 1, n + 1, cmp); // for(int i = 1; i <= n; i++) // System.out.println(s[i].beginn + " " + s[i].endd); int ans = 1;//表示可以開多少場活動 int now = 1;//表示現在在哪裡了 for(int i = 2; i <= n; i ++) { if(s[i].beginn >= s[now].endd) { ans ++; now = i; } } PrintStream ps = new PrintStream("E:\\output.txt"); System.setOut(ps);//把建立的列印輸出流賦給系統。即系統下次向 ps輸出 System.out.println(ans); }catch(FileNotFoundException e) { e.printStackTrace(); } } }
這個東西吧 主要學習
把類弄在外部,就可以例項化啦
Comparator<node> cmp = new Comparator<node>(){ @Override public int compare(node o1, node o2) { if(o1.endd != o2.endd) return o1.endd - o2.endd; //從小到大 else return o1.beginn - o2.beginn; //從小到大 } }; Arrays.sort(s, 1, n + 1, cmp); /* Arrays的sort第一個是要排序的陣列的名稱 第二個是要排序開始的下標 第三個是排序結束的下標 這邊要注意的就是左閉右開 第四個是自定義的排序方法 */ /* 還有就是用Comparator <node> cmp = new Comparator<node>(){ };//這邊記得加分號啊 還有奧 就是第一個減去第二個是從小到大...... 第二個減去第一個是從大到小.....哭卿卿