解释下这段代码 private static List<Meeting> scheduleByCoverageRate(List<Meeting> meetings) { List<Meeting> sorted = meetings.stream() .sorted(Comparator.comparing(Meeting::getBeginTime) .thenComparing(Meeting::getCreateTime) .thenComparing(Meeting::getPost) ).collect(Collectors.toList()); int[] dp = new int[sorted.size()]; int[] interval_cache = new int[sorted.size()]; for(int i = 0; i < sorted.size(); i++){ Meeting current = sorted.get(i); interval_cache[i] = dp[i] = (int)((current.getEndTime().getTime() - current.getBeginTime().getTime()) / 1000); } for(int i = 1; i < sorted.size(); i++) { for(int j = 0; j < i; j++) { if(sorted.get(j).getEndTime().compareTo(sorted.get(i).getBeginTime()) <= 0) dp[i] = Math.max(dp[i], dp[j] + interval_cache[i]); } } int max_len = Arrays.stream(dp).max().orElse(-1); Assert.isTrue(max_len != -1, "size of argument is 0"); for(int i = sorted.size() - 1; i >= 0; i--) { sorted.get(i).setAllowed(dp[i] == max_len); if(dp[i] == max_len) max_len -= interval_cache[i]; } return sorted; }
时间: 2024-04-01 17:37:29 浏览: 18
这段代码是用来计算会议时间覆盖率的。首先,它会按照会议开始时间、创建时间和发布者进行排序,然后计算每个会议的持续时间,并将持续时间保存到数组interval_cache中。接着,它使用动态规划的思想,通过比较前一场会议与当前会议的结束时间,计算每个会议能够覆盖的时间长度,并将结果保存到数组dp中。最后,它通过遍历dp数组来判断每个会议是否可以被允许举行,并将结果保存到sorted列表中。具体实现中,从后向前遍历sorted列表,如果当前会议可以被允许举行,则将max_len减去该会议的持续时间。最终返回按照会议开始时间、创建时间和发布者排序后的会议列表。
相关问题
解释下这段代码 private static List<Meeting> scheduleByPosition(List<Meeting> meetings) { List<Meeting> sorted = meetings.stream() .sorted(Comparator.comparing(Meeting::getPost) .thenComparing(Meeting::getEndTime) .thenComparing(Meeting::getCreateTime) ).collect(Collectors.toList()); Meeting last = null; for(Meeting elem : sorted) { boolean status = last == null || last.getEndTime().compareTo(elem.getBeginTime()) < 0; if(status) last = elem; elem.setAllowed(status); } return sorted; }
这段代码是按照会议发布者、结束时间和创建时间进行排序,并根据前一场会议的结束时间判断当前会议是否可以被允许举行。具体实现中,它首先按照上述规则对会议列表进行排序,然后使用变量last来记录上一场会议,并且根据上一场会议的结束时间和当前会议的开始时间判断当前会议是否可以被允许举行。如果上一场会议的结束时间早于当前会议的开始时间,则允许当前会议举行;否则,不允许当前会议举行。最后返回按照上述规则排序后的会议列表。
生成一个javaweb的CoolMetting会议管理系统并连接数据库的代码
以下是一个简单的JavaWeb的CoolMeeting会议管理系统的代码,包括了连接MySQL数据库的代码:
Meeting.java
```
package CoolMeeting;
import java.util.Date;
public class Meeting {
private int id;
private String name;
private Date startTime;
private Date endTime;
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 Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
}
```
MeetingDAO.java
```
package CoolMeeting;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class MeetingDAO {
private String driver = "com.mysql.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/CoolMeeting";
private String username = "root";
private String password = "123456";
public Connection getConnection() {
Connection connection = null;
try {
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return connection;
}
public List<Meeting> getAllMeetings() {
List<Meeting> meetings = new ArrayList<>();
String sql = "SELECT * FROM meetings";
try (Connection connection = getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
Meeting meeting = new Meeting();
meeting.setId(resultSet.getInt("id"));
meeting.setName(resultSet.getString("name"));
meeting.setStartTime(resultSet.getTimestamp("start_time"));
meeting.setEndTime(resultSet.getTimestamp("end_time"));
meetings.add(meeting);
}
} catch (SQLException e) {
e.printStackTrace();
}
return meetings;
}
public void addMeeting(Meeting meeting) {
String sql = "INSERT INTO meetings (name, start_time, end_time) VALUES (?, ?, ?)";
try (Connection connection = getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, meeting.getName());
statement.setTimestamp(2, new Timestamp(meeting.getStartTime().getTime()));
statement.setTimestamp(3, new Timestamp(meeting.getEndTime().getTime()));
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void deleteMeeting(int id) {
String sql = "DELETE FROM meetings WHERE id = ?";
try (Connection connection = getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, id);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void updateMeeting(Meeting meeting) {
String sql = "UPDATE meetings SET name = ?, start_time = ?, end_time = ? WHERE id = ?";
try (Connection connection = getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, meeting.getName());
statement.setTimestamp(2, new Timestamp(meeting.getStartTime().getTime()));
statement.setTimestamp(3, new Timestamp(meeting.getEndTime().getTime()));
statement.setInt(4, meeting.getId());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
index.jsp
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CoolMeeting</title>
</head>
<body>
<h1>CoolMeeting</h1>
<table>
<tr>
<td>ID</td>
<td>Name</td>
<td>Start Time</td>
<td>End Time</td>
<td></td>
<td></td>
</tr>
<c:forEach var="meeting" items="${meetings}">
<tr>
<td>${meeting.id}</td>
<td>${meeting.name}</td>
<td>${meeting.startTime}</td>
<td>${meeting.endTime}</td>
<td><a href="edit.jsp?id=${meeting.id}">Edit</a></td>
<td><a href="delete.jsp?id=${meeting.id}">Delete</a></td>
</tr>
</c:forEach>
</table>
<h2>Add Meeting</h2>
<form action="add.jsp" method="post">
<label>Name:</label>
<input type="text" name="name"><br>
<label>Start Time:</label>
<input type="datetime-local" name="startTime"><br>
<label>End Time:</label>
<input type="datetime-local" name="endTime"><br>
<button type="submit">Add</button>
</form>
</body>
</html>
```
在这个简单的示例中,我们使用MySQL数据库来存储会议数据。MeetingDAO类负责连接数据库并提供基本的数据访问功能,而index.jsp页面则显示会议列表和提供添加、删除和更新会议的功能。