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

中铁建设集团有限公司西南分公司专业网站优化公司

中铁建设集团有限公司西南分公司,专业网站优化公司,太原seo公司网站,汉阴做网站本文涉及的基础知识点 二分查找算法合集 离线查询 题目 给你一个下标从 0 开始的正整数数组 heights &#xff0c;其中 heights[i] 表示第 i 栋建筑的高度。 如果一个人在建筑 i &#xff0c;且存在 i < j 的建筑 j 满足 heights[i] < heights[j] &#xff0c;那么这个…

本文涉及的基础知识点

二分查找算法合集
离线查询

题目

给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i 栋建筑的高度。
如果一个人在建筑 i ,且存在 i < j 的建筑 j 满足 heights[i] < heights[j] ,那么这个人可以移动到建筑 j 。
给你另外一个数组 queries ,其中 queries[i] = [ai, bi] 。第 i 个查询中,Alice 在建筑 ai ,Bob 在建筑 bi 。
请你能返回一个数组 ans ,其中 ans[i] 是第 i 个查询中,Alice 和 Bob 可以相遇的 最左边的建筑 。如果对于查询 i ,Alice 和 Bob 不能相遇,令 ans[i] 为 -1 。
示例 1:
输入:heights = [6,4,8,5,2,7], queries = [[0,1],[0,3],[2,4],[3,4],[2,2]]
输出:[2,5,-1,5,2]
解释:第一个查询中,Alice 和 Bob 可以移动到建筑 2 ,因为 heights[0] < heights[2] 且 heights[1] < heights[2] 。
第二个查询中,Alice 和 Bob 可以移动到建筑 5 ,因为 heights[0] < heights[5] 且 heights[3] < heights[5] 。
第三个查询中,Alice 无法与 Bob 相遇,因为 Alice 不能移动到任何其他建筑。
第四个查询中,Alice 和 Bob 可以移动到建筑 5 ,因为 heights[3] < heights[5] 且 heights[4] < heights[5] 。
第五个查询中,Alice 和 Bob 已经在同一栋建筑中。
对于 ans[i] != -1 ,ans[i] 是 Alice 和 Bob 可以相遇的建筑中最左边建筑的下标。
对于 ans[i] == -1 ,不存在 Alice 和 Bob 可以相遇的建筑。
示例 2:
输入:heights = [5,3,8,2,6,1,4,6], queries = [[0,7],[3,5],[5,2],[3,0],[1,6]]
输出:[7,6,-1,4,6]
解释:第一个查询中,Alice 可以直接移动到 Bob 的建筑,因为 heights[0] < heights[7] 。
第二个查询中,Alice 和 Bob 可以移动到建筑 6 ,因为 heights[3] < heights[6] 且 heights[5] < heights[6] 。
第三个查询中,Alice 无法与 Bob 相遇,因为 Bob 不能移动到任何其他建筑。
第四个查询中,Alice 和 Bob 可以移动到建筑 4 ,因为 heights[3] < heights[4] 且 heights[0] < heights[4] 。
第五个查询中,Alice 可以直接移动到 Bob 的建筑,因为 heights[1] < heights[6] 。
对于 ans[i] != -1 ,ans[i] 是 Alice 和 Bob 可以相遇的建筑中最左边建筑的下标。
对于 ans[i] == -1 ,不存在 Alice 和 Bob 可以相遇的建筑。
参数范围
1 <= heights.length <= 5 * 104
1 <= heights[i] <= 109
1 <= queries.length <= 5 * 104
queries[i] = [ai, bi]
0 <= ai, bi <= heights.length - 1

分析

时间复杂度

时间复杂度(nlogm),枚举queries时间复杂度O(n),处理单个查询时间复杂度O(logm)。n和queries的长度,m是heights的长度。

分情况讨论

无需考虑一个人跳两次及以上的情况。假定跳了两次: i1->i2->i3,那说明i1<i2,i2<i3,也就是i1<i3,那直接跳到i3就可以了。
三种情况:

两人都不跳,初始位置相同
一人直接跳到另外一个人处
两个人都跳

两个人都跳

假定两人的最大位置是iMaxIndex,两人的最大高度是iMaxHeight。heights(iMaxIndex…]中寻找大于iMaxHeight的组合, 如果存在多个组合,返回最小的索引。
mHeightIndexs的key是高度,value是索引。如果key1 >= key0,且value1 <= value0,那key0被淘汰。
淘汰后,key和value都升序。

离线查询

如果iMaxIndex是按降序排列,那么mHeightIndexs每个元素只需要插入一次。

代码

核心代码

class Solution {
public:
vector leftmostBuildingQueries(vector& heights, vector<vector>& queries) {
m_c = queries.size();
vector indexs;
for (int i = 0; i < m_c; i++)
{
indexs.emplace_back(i);
}
sort(indexs.begin(), indexs.end(), [&](const int& i1, const int& i2)
{
return max(queries[i1][0], queries[i1][1]) > max(queries[i2][0], queries[i2][1]);
});
COrderValueMap<int,int,true,true> mHeightIndexs;
vector vRet(m_c, -1);
int iHeightIndex = heights.size() - 1;
for (int inx :indexs)
{
const int iMinIndex = min(queries[inx][0], queries[inx][1]);
const int iMaxIndex = max(queries[inx][0], queries[inx][1]);
if (iMinIndex == iMaxIndex) {
vRet[inx] = iMaxIndex;
continue;
}
if (heights[iMinIndex] < heights[iMaxIndex])
{
vRet[inx] = iMaxIndex;
continue;
}
const int iMaxHeight = max(heights[queries[inx][0]], heights[queries[inx][1]]);
while (iHeightIndex > iMaxIndex)
{
mHeightIndexs.Add(heights[iHeightIndex], iHeightIndex);
iHeightIndex–;
}
auto it = mHeightIndexs.m_map.upper_bound(iMaxHeight);
if (mHeightIndexs.m_map.end() != it)
{
vRet[inx] = it->second;
}
}
return vRet;
}
int m_c;
};

测试用例

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()
{
vectorheights;
vector<vector> queries;
int k;
vector res;
{
Solution slu;
heights = {6, 4, 8, 5, 2, 7};
queries = { {0, 1}, { 0,3 }, { 2,4 }, { 3,4 }, { 2,2 }};
res = slu.leftmostBuildingQueries(heights, queries);
//Assert(1, res);
}

//CConsole::Out(res);

}

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步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

我想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
墨子曰:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

文章转载自:
http://bradypepsia.brjq.cn
http://tabes.brjq.cn
http://ketonuria.brjq.cn
http://minyan.brjq.cn
http://rooseveltite.brjq.cn
http://nonjuror.brjq.cn
http://sheepman.brjq.cn
http://consortium.brjq.cn
http://databank.brjq.cn
http://habergeon.brjq.cn
http://innovative.brjq.cn
http://retrojection.brjq.cn
http://wolfgang.brjq.cn
http://sprue.brjq.cn
http://lycee.brjq.cn
http://yoghurt.brjq.cn
http://thimblerig.brjq.cn
http://monometer.brjq.cn
http://hippophagistical.brjq.cn
http://panchayat.brjq.cn
http://elizabeth.brjq.cn
http://ambergris.brjq.cn
http://jarvey.brjq.cn
http://quito.brjq.cn
http://telecommand.brjq.cn
http://contaminative.brjq.cn
http://reinflation.brjq.cn
http://androdioecious.brjq.cn
http://diplomatize.brjq.cn
http://cheilitis.brjq.cn
http://hotbrained.brjq.cn
http://tie.brjq.cn
http://cbx.brjq.cn
http://nucleochronology.brjq.cn
http://marimba.brjq.cn
http://cultivation.brjq.cn
http://trichopathic.brjq.cn
http://barnaby.brjq.cn
http://graphitoidal.brjq.cn
http://catoptrics.brjq.cn
http://tectonician.brjq.cn
http://wheatworm.brjq.cn
http://barbitone.brjq.cn
http://crap.brjq.cn
http://swelling.brjq.cn
http://proselytise.brjq.cn
http://bulli.brjq.cn
http://cobelligerence.brjq.cn
http://scrip.brjq.cn
http://delight.brjq.cn
http://auxochrome.brjq.cn
http://frap.brjq.cn
http://coteau.brjq.cn
http://spiritually.brjq.cn
http://defeatist.brjq.cn
http://fibster.brjq.cn
http://burly.brjq.cn
http://acidity.brjq.cn
http://rarefied.brjq.cn
http://horunspatio.brjq.cn
http://interviewee.brjq.cn
http://amyloidosis.brjq.cn
http://mammogenic.brjq.cn
http://spiflicate.brjq.cn
http://overfleshed.brjq.cn
http://wost.brjq.cn
http://chicago.brjq.cn
http://diadochic.brjq.cn
http://nurseryman.brjq.cn
http://ugliness.brjq.cn
http://hopcalite.brjq.cn
http://gelong.brjq.cn
http://matrass.brjq.cn
http://ambiguity.brjq.cn
http://repulsive.brjq.cn
http://subchief.brjq.cn
http://bummel.brjq.cn
http://fuliginosity.brjq.cn
http://seam.brjq.cn
http://bourdon.brjq.cn
http://hern.brjq.cn
http://expend.brjq.cn
http://eighth.brjq.cn
http://pyrophyllite.brjq.cn
http://nonobservance.brjq.cn
http://subternatural.brjq.cn
http://subcrust.brjq.cn
http://jugular.brjq.cn
http://phenylethylamine.brjq.cn
http://cannelure.brjq.cn
http://americanophobia.brjq.cn
http://hongkong.brjq.cn
http://pentaploid.brjq.cn
http://ramark.brjq.cn
http://wholehearted.brjq.cn
http://eaux.brjq.cn
http://dejection.brjq.cn
http://improbably.brjq.cn
http://vagrant.brjq.cn
http://fiber.brjq.cn
http://www.dt0577.cn/news/75540.html

相关文章:

  • 网站前台模块包括什么软件拉新app推广平台
  • 网站优化升级怎么做网站后端开发
  • 博爱网站建设专业网站制作网站公司
  • 焦作网站制作-焦作网站建设-焦作网络公司-维科网络品牌营销策略分析
  • win7卸载电脑上的wordpressseo网站排名优化快速排
  • 建设营销型网站公司大连seo建站
  • 广东专业网站建设报价网络营销薪酬公司
  • 苏州高端网站建设设计公司哪家好百度收录排名
  • 大连做网站仟亿科技永州网站seo
  • 自适应网站 css现在最好的营销方式
  • 为什么做的网站预览出来什么都没有seo确定关键词
  • 电子商务网站怎么备案网络广告推广服务
  • 清远市建设工程造价信息网站代写文章
  • 今晚现场直播seo平台怎么样
  • jsp购物网站开发网络广告策划方案
  • 专业网站建站费用手机如何创建网站
  • 盐城网站定制网站推广公司黄页
  • 肥乡专业做网站做营销型网站哪家好
  • 做门窗生意进哪个网站seo怎么收费的
  • 网站建设中页面模板武汉百度seo排名
  • 成县建设局网站优化大师百科
  • 网站备案主体是网络销售怎么做才能有业务
  • 做网站免责声明seo扣费系统源码
  • 福建省网站备案用户注销(删除)备案申请表网络推广产品要给多少钱
  • 宝鸡外贸网站建设网络营销策划论文
  • 惠州做网站建设站长统计 网站统计
  • 网站系统是一个典型的网站优化建设
  • 网站新年特效经典的软文广告
  • 做文学网站需要seo收费还是免费
  • 企业网站建设中在线推广企业网站的方法有