杭电oj2037——今年暑假不AC(java实现)

思路:标准贪心

先把所有思路列出来:

1.优先选择开始时间最早的,经分析,不可行

2.优先选择持续时间最短的,经分析,不可行

3.优先选择结束时间最早的,经分析,可行

然后根据第三种思路实现代码就好

 

实现思路:先将数据存在二维数组里,然后用冒泡排序结束时间升序排序,然后遍历一遍,选择时间能衔接得上的

source code:

package hduoj;

import java.util.Scanner;

public class hdoj_2037 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(true){
            int count = sc.nextInt();
            if(count == 0) break;
            int[][] data = new int[count][2];
            for(int i = 0;i<count;++i){
                data[i][0] = sc.nextInt();
                data[i][1] = sc.nextInt();
            }//initialize
            bubble_2D_arr(data);
            int res = 0;
            int index = -1;
            for(int i = 0;i < data.length;++i){
                if(data[i][0]>=index){
                    ++res;
                    index = data[i][1];
                }
            }
            System.out.println(res);
        }
    }

    private static void bubble_2D_arr(int[][] arr){
        boolean flag = false;
        int len = arr.length;//get the line number
        for(int i = 0;i < len;++i){
            for(int j = 1;j < len - i;++j){
                if(arr[j-1][1] > arr[j][1]){
                    int temp1 = arr[j-1][0];
                    int temp2 = arr[j-1][1];
                    arr[j-1][0] = arr[j][0];
                    arr[j-1][1] = arr[j][1];
                    arr[j][0] = temp1;
                    arr[j][1] = temp2;
                    flag = true;
                }
            }
            if(!flag) break;//indicates the seq isn't change ever before
        }
    }
}

 

 

代码已经ac

希望对大家有所帮助

以上

 

posted @ 2020-02-02 18:03  醉生梦死_0423  阅读(361)  评论(0编辑  收藏  举报