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

个人的网站如何做外贸网站

个人的网站,如何做外贸网站,化工行业网站设计,wordpress文章添加标签居中Leetcode 2940. Find Building Where Alice and Bob Can Meet 1. 解题思路2. 代码实现3. 算法优化 题目链接#xff1a;2940. Find Building Where Alice and Bob Can Meet 1. 解题思路 这一题本质上又是限制条件下求极值的问题#xff0c;算是我最不喜欢的题目类型之一吧…Leetcode 2940. Find Building Where Alice and Bob Can Meet 1. 解题思路2. 代码实现3. 算法优化 题目链接2940. Find Building Where Alice and Bob Can Meet 1. 解题思路 这一题本质上又是限制条件下求极值的问题算是我最不喜欢的题目类型之一吧因为真的挺考验智商的…… 很不幸没想到啥好的思路还是分步实现的策略第一步就是找到每一个位置上后续能够访问的全部位置然后第二步就是在对于query的两个位置直接获得他们能够访问的位置然后求公共的最小元素。 显然对于第一个问题我们只需要对原数组进行排序然后从高到低依次插入到有序队列当中此时其插入时队列后方的所有元素就为其能够访问的所有位置。 由此我们就能够在 O ( N ⋅ l o g N ) O(N \cdot logN) O(N⋅logN)的时间复杂度能找到所有坐标上能够访问的所有位置。然后剩下的问题就是如何去找到两个有序数列的最小公共元素。 这里我做了个小trick就是注意到了对于上述问题显然如果两个序列有交集那么显然对于其中起始位置更高的那个序列不妨记作序列A而言其最后一个元素必然也在另一个序列不妨记作序列B当中且满足从某一个位置开始必然有后方元素全在序列B当中而其前方的序列均不在序列A当中。 由此我们就可以使用一个二分搜索来快速找寻上述最小公共坐标了所有query的时间复杂度也为 O ( N ⋅ l o g N ) O(N \cdot logN) O(N⋅logN)。 然而没有想到的是这里居然遇到了内存爆炸的问题就很懵逼…… 这里我是通过剪枝和及时删除的方法处理掉了这个问题但是这里多少有点取巧了而且非常的不优雅就很难受了。 所谓剪枝倒是思路还挺自然因为如果有两个坐标 i , j i,j i,j满足 i j ij ij或者 i j ij ij且 h i h j h_i h_j hi​hj​那答案就是 j j j反之亦然。这样我们就可以先去掉很多easy case了。 然后关于及时删除就是首先对query也进行一下排序然后优先做那些可以快速得到后方位置的坐标对应的query然后在他们后续不会再被使用时及时进行删除通过这种方式我们在这道题上面是通过了测试样例不过很取巧就是了…… 2. 代码实现 给出python代码实现如下 class Solution:def leftmostBuildingQueries(self, heights: List[int], queries: List[List[int]]) - List[int]:buildings [(idx, h) for idx, h in enumerate(heights)]buildings sorted(buildings, keylambda x: (x[1], -x[0]), reverseTrue)indexes {x[0]: i for i, x in enumerate(buildings)}res [-1 for _ in queries]queries [(idx, i, j) for idx, (i, j) in enumerate(queries)]for idx, i, j in queries:if i j:res[idx] ielif i j and heights[i] heights[j]:res[idx] jelif i j and heights[i] heights[j]:res[idx] iqueries [(idx, i, j) if indexes[i] indexes[j] else (idx, j, i) for (idx, i, j) in queries if res[idx] -1]queries sorted(queries, keylambda x: indexes[x[2]])trigger defaultdict(list)last_seen defaultdict(int)for idx, i, j in queries:trigger[j].append((idx, i, j))last_seen[i] idxlast_seen[j] idxdef query(i, j):if i j:return ir1, r2 can_reach[i], can_reach[j]n, m len(r1), len(r2)idx bisect.bisect_left(r2, r1[0])if idx m and r1[0] r2[idx]:return r1[0]i 0idx bisect.bisect_left(r2, r1[-1])if idx m or r1[-1] ! r2[idx]:return -1j n-1while i j-1:k (ij) // 2idx bisect.bisect_left(r2, r1[k])if idx m and r1[k] r2[idx]:j kelse:i kreturn r1[j]s []can_reach {}for i, h in buildings:idx bisect.bisect_left(s, i)s.insert(idx, i)if i in last_seen:can_reach[i] s[idx:]for idx, i, j in trigger[i]:res[idx] query(i, j)if last_seen[i] idx:can_reach.pop(i)if j ! i and last_seen[j] idx:can_reach.pop(j)return res提交代码评测得到耗时5336ms占用内存100.2MB。 3. 算法优化 看了一下大佬们的最优解答发现在剪枝这部分大家其实思路是一致的但是在那些复杂case的处理上大佬们的思路实在是太牛了。 他们的思路是直接使用堆排的方式先将所需要比对的位置全部用一个堆排维护起来其实用有序数列也行然后考察每一个位置看它能够作为那些位置的答案。 给出大佬们的实现方法如下 class Solution:def leftmostBuildingQueries(self, heights: List[int], queries: List[List[int]]) - List[int]:m len(queries)res [-1] * mq []left [[] for _ in heights]for k, (i, j) in enumerate(queries):if i j:i, j j, iif i j or heights[i] heights[j]:res[k] jelse:left[j].append((heights[i], k))h []for i, x in enumerate(heights):while h and h[0][0] x:k heappop(h)[1]res[k] ifor p in left[i]:heappush(h, p)return res提交代码评测得到耗时3680ms占用内存39.5MB。
http://www.hkea.cn/news/14439823/

相关文章:

  • 中国制造网服务种类衡阳seo排名
  • 做色网站建站计划书
  • 在线网站建设收费湖北省建设工程造价管理站网站
  • 打开网站代码怎么写国内网站建设排名
  • 有了ddns怎么建设网站网站空间 域名
  • 乐清建站公司企业建站公司是干嘛的
  • 聊城做网站公司聊城博达网站注册手机号安全吗
  • 企业在建设银行网站怎么发工资专业做旅游网站
  • 青岛做网站服务商wordpress 后台编辑
  • 深圳如何优化网站巨腾外贸网站建设
  • 各种网站的区别无锡效果图制作
  • 电商网站建设解决方案企业宣传文案模板
  • 兰州网站推大理建设局网站
  • 深圳做app网站的公司名称app营销的特点与优势
  • 如何做网站百度排名优化网站卖了对方做违法吗
  • 济南多语言网站建设在线做3d交互的网站
  • 杭州 网站建设公司双语对照网站
  • 鑫迪一键建站系统建设网站的安全性
  • 上海建设资质审批网站国际网站 建设
  • 专业建设专题网站时代强个人网站
  • 广西seo网站推广mvc5网站开发实战详解
  • c 做网站开发网络营销app有哪些
  • 外流网站建设微信网站服务器要求
  • 西宁网站制作哪家好如何分析一个网站
  • 网站开发会计科目手机网站静态模板
  • 查找北京国互网网站建设企业系统培训平台
  • 做汽车的网站编辑做网站建设公司怎么选
  • 西安做网站建设的住房与城乡建设部网站特色小镇
  • 网站建设的财务计划django做的电子商务网站
  • 搭建网站服务器多少钱大连金州旅游景点有哪些