【leetcode】885. Boats to Save People
2024-09-05 22:47:14
题目如下:
解题思路:本题可以采用贪心算法,因为每条船最多只能坐两人,所以在选定其中一人的情况下,再选择第二个人使得两人的体重最接近limit。考虑到人的总数最大是50000,而每个人的体重最大是30000,因此会有很多人体重一样。这样可以用一个集合set保存体重,再用字典保存每个体重对应的人的数量,可以减少运算量。最后对set进行升序排序,再用双指针的方法,用low指针指向set头部,high指针指向set尾部,分别比较set[low]和set[high]的值,有如下情况:
a. set[low] + set[high] > limit: 表示set[high]的体重人只能一人坐一船,得出boats += dic[set[high]], high -= 1;
b. set[low] + set[high] <= high: 表示可以共坐一船,但这里又要考虑 dic[set[high]] 与 dic[set[low]] 的大小:
b1. dic[set[high]] > dic[set[low]] : 得出 boats += dic[set[low]], low += 1;
b2.dic[set[high]] < dic[set[low]] : 得出 boats += dic[set[high]], high -= 1;
b3:dic[set[high]] == dic[set[low]] : 得出 boats += dic[set[high]], high -= 1,low += 1;
最后当low == high的时候,表示只剩下相同体重的人,这时判断这些人能否共坐一船,得出最终boats的总数。
代码如下:
class Solution(object):
def numRescueBoats(self, people, limit):
"""
:type people: List[int]
:type limit: int
:rtype: int
"""
dic = {}
puniq = []
for i in people:
if i not in dic:
dic[i] = 1
puniq.append(i)
else:
dic[i] += 1
puniq.sort()
boats = 0
low = 0
high = len(puniq) - 1
while low < high:
if puniq[low] + puniq[high] > limit:
boats += dic[puniq[high]]
dic[puniq[high]] = 0
high -= 1
else:
if dic[puniq[low]] > dic[puniq[high]]:
boats += dic[puniq[high]]
dic[puniq[low]] -= dic[puniq[high]]
dic[puniq[high]] = 0
high -= 1
elif dic[puniq[low]] < dic[puniq[high]]:
boats += dic[puniq[low]]
dic[puniq[high]] -= dic[puniq[low]]
dic[puniq[low]] = 0
low += 1
else:
boats += dic[puniq[high]]
dic[puniq[high]] = 0
dic[puniq[low]] = 0
low += 1
high -= 1
if limit >= puniq[high]*2:
boats += ((dic[puniq[high]]/2) + (dic[puniq[high]]%2))
else:
boats += dic[puniq[high]]
#boats += dic[puniq[low]] return boats
最新文章
- C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息
- Security2:Create User
- 无边框窗体和timer控件
- iframe在ios下无故扩大的问题探究
- 洛谷P1595 信封问题
- Java过滤器,SpringMVC拦截器之间的一顺序点关系
- Spring框架学习(二)
- Android working with Volley
- TCP/IP四层模型和OSI七层模型的概念
- 分享8款绚丽的HTML5/jQuery特效插件
- HTTPS那些事(一) HTTPS原理
- HTML高级选项卡(1)————表标签
- JS document 获取 html对象的问题
- thinkjs——一个字段一种数字代表两种状态
- go语言实现https的简单get和post请求
- DesigningFormsinAccess2010
- Spring Boot 设置静态资源访问
- dos 下如何查看环境变量
- RSA加密工具类(非对称加密算法)
- 安装freepbx后创建sip分机
热门文章
- 使用Chrome逆向分析JS实战---分析google网站翻译器原文存放位置
- ES与CQRS之旅
- malloc函数分配内存失败的常见原因
- 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第7节 内部类_7_内部类的概念与分类
- Golang 调用 aws-sdk 操作 S3对象存储
- Golang new() vs make()
- 44 答疑(三)--join的写法/Simple nested loop join的性能问题/Distinct和group by的性能/备库自增主键问题
- 2019寒假作业三:PTA7-1抓老鼠啊~亏了还是赚了
- Java相关面试题总结+答案(五)
- python 安装成linux中的systemd守护运行