设计一个待办事项清单
难度:
标签:
题目描述
代码结果
运行时间: 59 ms, 内存: 18.4 MB
/**
* Leetcode 2590: 设计一个待办事项清单
*
* 题目思路:
* 1. 设计一个Todo类来表示一个待办事项,包含id、标题和完成状态。
* 2. 实现一个TodoList类,包含添加、删除、标记完成和获取所有待办事项的方法。
* 3. 使用ArrayList来存储Todo对象,并使用Java Stream API来实现这些方法。
*/
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class Todo {
private int id;
private String title;
private boolean completed;
public Todo(int id, String title) {
this.id = id;
this.title = title;
this.completed = false;
}
public int getId() {
return id;
}
public String getTitle() {
return title;
}
public boolean isCompleted() {
return completed;
}
public void markCompleted() {
this.completed = true;
}
}
class TodoList {
private List<Todo> todos;
public TodoList() {
this.todos = new ArrayList<>();
}
public void addTodo(int id, String title) {
todos.add(new Todo(id, title));
}
public void deleteTodoById(int id) {
todos = todos.stream()
.filter(todo -> todo.getId() != id)
.collect(Collectors.toList());
}
public void markTodoCompleted(int id) {
todos.stream()
.filter(todo -> todo.getId() == id)
.findFirst()
.ifPresent(Todo::markCompleted);
}
public List<Todo> getTodos() {
return todos.stream()
.collect(Collectors.toList());
}
}
解释
方法:
该题解实现了一个待办事项清单,允许多个用户添加、查询和完成任务。每个任务包含描述、截止日期、标签和完成状态。主要功能包括添加任务、获取所有未完成任务、按标签获取未完成任务和完成指定任务。实现思路如下:
1. 使用字典存储每个用户的任务列表和任务计数。
2. 添加任务时,生成唯一的任务ID并存储任务详细信息。任务按截止日期排序。
3. 查询功能允许按用户ID获取未完成任务列表,或按特定标签筛选。
4. 完成任务功能通过标记任务为已完成来更新任务状态。
时间复杂度:
O(n log n) for addTask, O(k) for getAllTasks, getTasksForTag, and completeTask
空间复杂度:
O(m)
代码细节讲解
🦆
如何处理如果用户ID不存在于系统中,而调用添加任务的情况?
▷🦆
在每次添加任务后重新排序任务列表是否会影响性能?考虑到任务数量可能非常大。
▷🦆
完成任务的方法中,如果指定的任务ID不存在于用户的任务列表中,该如何处理?
▷