第一行输入一个n代表有n场演讲(n <= 200)下面n行需要输入两个整数 start、end代表会议开始时间和结束时间,其中(1<= start<=end <= 24)
输出一个整数,这个整数代表最多的宣讲场次
3 1 10 11 20 10 11
3
3 6 12 7 8 8 9
2
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.Arrays; public class Main{ public static Integer method(int[][] meets){ Integer res = 1; Arrays.sort(meets,(int[] o1,int[] o2)->{ if(o1[1] > o2[1]){ return 1; } if(o1[1] == o2[1]){ return o1[0] - o2[0]; } // o1[1] < O2[1] return -1; }); int preEnd = meets[0][1]; for(int i=1; i < meets.length; i++){ // System.out.print(meets[i][0]+" "); // System.out.println(meets[i][1]); int nextStart = meets[i][0]; if(nextStart >= preEnd){ res++; preEnd = meets[i][1]; // System.out.println("---------------------"); } } return res; } public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(bf.readLine()); if(n < 2){ System.out.println(n); return; } int[][] meets = new int[n][2]; for(int i = 0;i<n;i++){ String[] meetTime = bf.readLine().split(" "); int start = Integer.parseInt(meetTime[0]); int end = Integer.parseInt(meetTime[1]); meets[i] = new int[]{start, end}; } System.out.println(method(meets)); } }
def solution(matrix): matrix = set(matrix) matrix = list(matrix) matrix.sort(key=lambda x: x[1]) # 按照结束时间对会议进行排序,不需要考虑开始时间,然后贪心求解 ans = 1 n = len(matrix) pre_end = matrix[0][1] for i in range(1, n): start, end = matrix[i][0], matrix[i][1] if pre_end<=start: ans+=1 pre_end = matrix[i][1] return ans if __name__=='__main__': n = int(input()) matrix = [] for i in range(n): start, end = map(int, input().split()) matrix.append((start, end)) ans = solution(matrix) print(ans)
#include <iostream> #include <vector> #include <algorithm> using namespace std; bool cmp(pair<int, int> & a, pair<int, int> & b) { if (a.second == b.second) return a.first < b.first; // 当end相等时,按照start升序,例如:[1,2] [2,2] 是可以算两天的 return a.second < b.second; } int main(void) { int n, start, end,result = 0; scanf("%d", &n); vector<pair<int, int>> conference; // first:start,second:end for (int i = 0; i < n; i++) { scanf("%d %d", &start, &end); conference.push_back(make_pair(start, end)); } sort(conference.begin(), conference.end(),cmp); start = conference[0].first; for (int i = 0; i < n; i++) { if(start <= conference[i].first){ result++; start = conference[i].second; } //cout << conference[i].first << " " << conference[i].second << endl; } cout << result; return 0; }
import java.util.*; public class Main { private static class Node{ public int start; public int end; public Node(int start,int end){ this.start=start; this.end=end; } } public static void main(String[] args){ Scanner input=new Scanner(System.in); int lineCount=input.nextInt(); if(lineCount<=0){ System.out.println(0); return; } Node[] array=new Node[lineCount]; for(int i=0;i<lineCount;i++){ array[i]=new Node(input.nextInt(),input.nextInt()); } Arrays.sort(array,(e1,e2)->e1.start-e2.start); Arrays.sort(array,(e1,e2)->e1.end-e2.end); int start=array[0].start; int count=0; for(Node node: array){ if(start<=node.start){ count++; start=node.end; } } System.out.println(count); } }
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; vector<vector<int>> grid(n, vector<int>(2)); for(int i = 0; i < n; i++){ cin>>grid[i][0]>>grid[i][1]; } // 按区间end值升序排序,注意若end值相等时保证start升序 sort(grid.begin(), grid.end(), [](const auto &a, const auto &b){ if(a[1]==b[1]) return a[0] < b[0]; return a[1] < b[1]; }); int res = 1, right = grid[0][1]; for(int i = 1; i < n; i++){ if(right<=grid[i][0]){ res++; right = grid[i][1]; } } cout<<res; return 0; }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[][] time = new int[n][2]; for(int i = 0; i < n; i++){ String[] chars = br.readLine().split(" "); for(int j = 0; j < chars.length; j++){ time[i][j] = Integer.parseInt(chars[j]); } } Arrays.sort(time, new Comparator<int[]>(){ @Override public int compare(int[] o1, int[] o2){ if(o1[0] == o2[0]){ // 若俩数组的第一个元素相等,则比较它们的第二个元素 return o1[1] - o2[1]; }else { // 若俩数组的第一个元素不相等,则按从小到大的顺序排列 return o1[0] - o2[0]; } } }); int lastMeeting = 0; int sum = 1; int endTime = time[0][1]; for(int i = 1; i < n; i++){ if(time[i][0] < endTime){ //有冲突了,比较上一个回会议和这个会议的停止时间 if(time[lastMeeting][1] > time[i][1]){ //上一次的结束时间更晚,就放弃上一次会议 lastMeeting = i; endTime = time[i][1]; } } else { //没有冲突,把这次会议加进去 lastMeeting = i; endTime = time[i][1]; sum++; } } System.out.println(sum); } }