Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2024-05-04 15:54:18
881. Boats to Save People
有一个array people,people[i]代表这个人的重量
现在要用一艘船载所有人
船一次最多能两个人,且最大负重为limit
请问最少几次就能载完所有人
思路:
将people排序,用two pointer指向最重、最轻的人
每次一定会载走最重的那个
如果最重+最轻<limit,那就连最轻的也载走
就这样载走所有人,就可以得到答案了
因为要排序所以时间复杂度是o(nlog(n))
换个想法,因为每个人的体重一定都是<=limit
那建立一个array长度为limit+1
去记录每个体重出现的次数
这样就只要o(n)就好
c code :
int numRescueBoats(int* people, int peopleSize, int limit) {
int *rec=(int *)calloc(limit+1,sizeof(int));
for (int i=0;i<peopleSize;i++){
rec[people[i]]++;
}
int r=limit,l=0,ans=0;
while(r>=l){
while(r>=l && rec[r]<=0){
r
作者: aioiwer318 (哀欧)   2024-05-04 15:55:00
别卷了
作者: argorok (s.green)   2024-05-04 15:57:00
别卷了
作者: wu10200512 (廷廷)   2024-05-04 16:01:00
别卷了
作者: digua (地瓜)   2024-05-04 16:02:00
大师
作者: ChungHsi1021 (s0mple)   2024-05-04 16:04:00
别卷了
作者: sustainer123 (caster)   2024-05-04 16:38:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com