当前位置: 首页 > news >正文

刷q币网站建设长治网站建设推广

刷q币网站建设,长治网站建设推广,wordpress云标签,网站建设应注重实用性作者推荐 利用广度优先或模拟解决米诺骨牌 本文涉及的基础知识点 二分查找算法合集 题目 一个酒店里有 n 个房间#xff0c;这些房间用二维整数数组 rooms 表示#xff0c;其中 rooms[i] [roomIdi, sizei] 表示有一个房间号为 roomIdi 的房间且它的面积为 sizei 。每一…作者推荐 利用广度优先或模拟解决米诺骨牌 本文涉及的基础知识点 二分查找算法合集 题目 一个酒店里有 n 个房间这些房间用二维整数数组 rooms 表示其中 rooms[i] [roomIdi, sizei] 表示有一个房间号为 roomIdi 的房间且它的面积为 sizei 。每一个房间号 roomIdi 保证是 独一无二 的。 同时给你 k 个查询用二维数组 queries 表示其中 queries[j] [preferredj, minSizej] 。第 j 个查询的答案是满足如下条件的房间 id 房间的面积 至少 为 minSizej 且 abs(id - preferredj) 的值 最小 其中 abs(x) 是 x 的绝对值。 如果差的绝对值有 相等 的选择 最小 的 id 。如果 没有满足条件的房间 答案为 -1 。 请你返回长度为 k 的数组 answer 其中 answer[j] 为第 j 个查询的结果。 示例 1 输入rooms [[2,2],[1,2],[3,2]], queries [[3,1],[3,3],[5,2]] 输出[3,-1,3] 解释查询的答案如下 查询 [3,1] 房间 3 的面积为 2 大于等于 1 且号码是最接近 3 的为 abs(3 - 3) 0 所以答案为 3 。 查询 [3,3] 没有房间的面积至少为 3 所以答案为 -1 。 查询 [5,2] 房间 3 的面积为 2 大于等于 2 且号码是最接近 5 的为 abs(3 - 5) 2 所以答案为 3 。 示例 2 输入rooms [[1,4],[2,3],[3,5],[4,1],[5,2]], queries [[2,3],[2,4],[2,5]] 输出[2,1,3] 解释查询的答案如下 查询 [2,3] 房间 2 的面积为 3 大于等于 3 且号码是最接近的为 abs(2 - 2) 0 所以答案为 2 。 查询 [2,4] 房间 1 和 3 的面积都至少为 4 答案为 1 因为它房间编号更小。 查询 [2,5] 房间 3 是唯一面积大于等于 5 的所以答案为 3 。 参数范围 n rooms.length 1 n 105 k queries.length 1 k 104 1 roomIdi, preferredj 107 1 sizei, minSizej 107 分析 时间复杂 O(nlogn)。 步骤 一预处理。房间按面积排序从大到小。对查询的索引排序面积大的在前。 二枚举每个查询将房间面积大于等于当前查询面积的房间号加到setRoomNO中。在setRoomNO中找第一个大于等于preferredj和小于preferredj的房间号。比较看那个更接近preferredj。 代码 核心代码 class Solution { public:vectorint closestRoom(vectorvectorint rooms, vectorvectorint queries) {vectorint indexs(queries.size());iota(indexs.begin(), indexs.end(), 0);sort(indexs.begin(), indexs.end(), [queries](const int i1, const int i2) {return queries[i1][1] queries[i2][1]; });sort(rooms.begin(), rooms.end(), [](const auto v1, const auto v2) {return v1[1] v2[1]; });int indexRoom 0;setint setRoomNO;vectorint vRet(queries.size(),-1);for (const auto i : indexs){while ((indexRoom rooms.size()) (rooms[indexRoom][1] queries[i][1])){setRoomNO.emplace(rooms[indexRoom][0]);indexRoom;}auto it setRoomNO.lower_bound(queries[i][0]);if ((setRoomNO.end() it)(setRoomNO.begin() it)){continue;}else if (setRoomNO.end() it){vRet[i] *std::prev(it);}else if (setRoomNO.begin() it){vRet[i] *it;}else{vRet[i] (*it - queries[i][0] queries[i][0] - *std::prev(it)) ? *std::prev(it) : *it; }}return vRet;} };测试用例 template void Assert(const T t1, const T t2) { assert(t1 t2); } template void Assert(const vector v1, const vector v2) { if (v1.size() ! v2.size()) { assert(false); return; } for (int i 0; i v1.size(); i) { Assert(v1[i], v2[i]); } } int main() { vectorvector rooms, queries; vector res; { rooms { {2,2},{1,2},{3,2} }; queries { {3,1},{3,3},{5,2} }; Solution slu; res slu.closestRoom(rooms, queries); Assert(res, vector{3, -1, 3}); } { rooms { {1,4},{2,3},{3,5},{4,1},{5,2} }; queries { {2,3},{2,4},{2,5} }; Solution slu; res slu.closestRoom(rooms, queries); Assert(res, vector{2,1, 3}); } { rooms { {2,2},{1,2},{3,2} }; queries { {3,1},{3,3},{5,2} }; Solution slu; res slu.closestRoom(rooms, queries); Assert(res, vector{3, -1, 3}); } //CConsole::Out(res);} 小的优化代码简洁增加可理解性方便排除 旧代码17行 auto it setRoomNO.lower_bound(queries[i][0]);if ((setRoomNO.end() it)(setRoomNO.begin() it)){continue;}else if (setRoomNO.end() it){vRet[i] *std::prev(it);}else if (setRoomNO.begin() it){vRet[i] *it;}else{vRet[i] (*it - queries[i][0] queries[i][0] - *std::prev(it)) ? *std::prev(it) : *it; }新代码12行 std::mapint, int mAbsToRoomNO;auto it setRoomNO.lower_bound(queries[i][0]);if (setRoomNO.end() ! it){mAbsToRoomNO[*it - queries[i][0]] *it;}if (setRoomNO.begin() ! it){const auto itPre std::prev(it);mAbsToRoomNO[queries[i][0]- *itPre] *itPre;}vRet[i] (mAbsToRoomNO.size()) ? mAbsToRoomNO.begin()-second : -1;2023年3月旧代码 class Solution { public: vector closestRoom(vectorvector rooms, vectorvector queries) { vector indexs; for (int i 0; i queries.size(); i) { indexs.push_back(i); } auto SortFun [](const vector v1, const vector v2) { return v1[1] v2[1]; }; std::sort(rooms.begin(), rooms.end(), SortFun); std::sort(indexs.begin(), indexs.end(), [queries](const int i1, const int i2) { return queries[i1][1] queries[i2][1]; }); std::set setRoomNO; int j rooms.size() - 1; vector vRet(queries.size()); for (int i1 queries.size() - 1; i1 0; i1–) { const int i indexs[i1]; const auto vq queries[i]; while ((j 0 ) (rooms[j][1] vq[1])) { setRoomNO.emplace(rooms[j][0]); j–; } auto it setRoomNO.lower_bound(vq[0]); std::set setSelRoomNO; if (setRoomNO.end() ! it) { setSelRoomNO.insert(it); } if (setRoomNO.begin() ! it) { setSelRoomNO.insert((–it)); } if (0 setSelRoomNO.size()) { vRet[i] -1; } else if (1 setSelRoomNO.size()) { vRet[i] *setSelRoomNO.begin(); } else if (2 setSelRoomNO.size()) { bool bPre abs(vq[0] - *setSelRoomNO.begin()) abs(vq[0] - *setSelRoomNO.rbegin()); vRet[i] bPre ? *setSelRoomNO.begin() : *setSelRoomNO.rbegin() ; } } return vRet; } }; 扩展阅读 视频课程 有效学习明确的目标 及时的反馈 拉伸区难度合适可以先学简单的课程请移步CSDN学院听白银讲师也就是鄙人的讲解。 https://edu.csdn.net/course/detail/38771 如何你想快 速形成战斗了为老板分忧请学习C#入职培训、C入职培训等课程 https://edu.csdn.net/lecturer/6176 相关下载 想高屋建瓴的学习算法请下载《喜缺全书算法册》doc版 https://download.csdn.net/download/he_zhidan/88348653 我想对大家说的话闻缺陷则喜是一个美好的愿望早发现问题早修改问题给老板节约钱。子墨子言之事无终始无务多业。也就是我们常说的专业的人做专业的事。如果程序是一条龙那算法就是他的是睛 测试环境 操作系统win7 开发环境 VS2019 C17 或者 操作系统win10 开发环境 VS2022 C17
http://www.zqtcl.cn/news/125229/

相关文章:

  • 在微信怎样搞做微视频网站商城小程序模板源码完整版
  • h5跟传统网站有啥区别读取wordpress最新文章
  • 网站推广120最超值的网站建设
  • 移动网站制作公司如何开公司做网站
  • 网站建设 青海试题wordpress的特点
  • 源码如何做网站宽甸县建设局网站
  • 用dw做的网页怎么连到网站上企业网站备案资料填写单
  • 中文 网站模板企业怎么建设网站
  • 建设户外腰包网站哪个网站注册域名好
  • 六安网站建设价格小学生编程网课前十名
  • 绵阳网站建设信赖辉煌wordpress多账号权限
  • 网站外链快速建设网站维护要学多久
  • 做网站都是用ps吗郑州网站设计培训
  • wordpress 多站点教程厦门做网站维护的公司
  • 婚纱网站建设需求分析wordpress js图片
  • seo网站怎么优化有哪些企业网站平台
  • 响应式中文网站欣赏wordpress 带分页的主题
  • 什么样的网站可以做站内站房地产的设计网站建设
  • 成都住房和城乡建设局 网站首页深圳西乡建网站
  • 商城类的网站一般怎么做开发app软件的步骤
  • 招聘网站做销售怎么样做网站后台学什么专业
  • 帮别人做彩票网站餐饮网站建设需求分析
  • 企业服务平台工程建设云深圳网站建设专业乐云seo
  • 怎么建立小公司网站抖音运营推广
  • 无锡地区做网站嵌入式软硬件开发
  • 网站建设框架怎么写企业网站本身应该就是企业( )的一部分
  • 如果做公司网站WordPress出现归档
  • 温州开发网站公司阿里云 拦截网站
  • 网站建设与管理实践实践报告南宁小程序建设
  • 网站后台功能技术要求网站建设 手机和pc