1. 程式人生 > >會場安排問題(貪心演算法) Comparator類排序的學習

會場安排問題(貪心演算法) Comparator類排序的學習

主要是學習類如何進行排序利用  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>(){
};//這邊記得加分號啊
還有奧 就是第一個減去第二個是從小到大......
第二個減去第一個是從大到小.....哭卿卿