LeetCode 1204. 最后一个能进入巴士的人
题目描述
思路分析
解法一:按顺序累加体重(推荐)
核心思路:
- 按
turn升序排序队列,模拟依次上车。- 维护累计体重
sum,若加入当前乘客后超过容量,则停止。- 记录最后一个满足
sum <= 1000的乘客姓名。
复杂度分析:
- 时间复杂度:O(n log n),排序为主。
- 空间复杂度:O(n),存储排序后的队列。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Solution {
public String lastPersonToFit(List<Person> people) {
List<Person> list = new ArrayList<>(people);
Collections.sort(list, Comparator.comparingInt(a -> a.turn));
int sum = 0;
String last = "";
for (Person p : list) {
if (sum + p.weight > 1000) {
break;
}
sum += p.weight;
last = p.name;
}
return last;
}
static class Person {
String name;
int weight;
int turn;
Person(String name, int weight, int turn) {
this.name = name;
this.weight = weight;
this.turn = turn;
}
}
}
import "sort"
type Person struct {
Name string
Weight int
Turn int
}
func lastPersonToFit(people []Person) string {
list := make([]Person, len(people))
copy(list, people)
sort.Slice(list, func(i, j int) bool {
return list[i].Turn < list[j].Turn
})
sum := 0
last := ""
for _, p := range list {
if sum+p.Weight > 1000 {
break
}
sum += p.Weight
last = p.Name
}
return last
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 1094. 拼车 | 中等 | 前缀和 |
| 1109. 航班预订统计 | 中等 | 差分数组 |
| 183. 从不订购的客户 | 简单 | 数据库查询 |
| 184. 部门工资最高的员工 | 中等 | 数据库查询 |
| 177. 第N高的薪水 | 中等 | 数据库查询 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!