您的位置:首页 > 游戏 > 游戏 > 如何自学美工_免费咨询群_抖音seo排名_seo外贸公司推广

如何自学美工_免费咨询群_抖音seo排名_seo外贸公司推广

2024/12/23 15:22:36 来源:https://blog.csdn.net/qq_45797421/article/details/144540137  浏览:    关键词:如何自学美工_免费咨询群_抖音seo排名_seo外贸公司推广
如何自学美工_免费咨询群_抖音seo排名_seo外贸公司推广

题目

还需要你前往力扣官网查看详细的题目要求 地址

1.一个酒店里有 n 个房间,这些房间用二维整数数组 rooms 表示,其中 rooms[i] = [roomIdi, sizei] 表示有一个房间号为 roomIdi 的房间且它的面积为 sizei 。每一个房间号   roomIdi 保证是 独一无二 的。2.同时给你 k 个查询,用二维数组 queries 表示,其中 queries[j] = [preferredj, minSizej] 。第 j 个查询的答案是满足如下条件的房间 id :房间的面积 至少 为 minSizej ,且abs(id - preferredj) 的值 最小 ,其中 abs(x) 是 x 的绝对值。如果差的绝对值有 相等 的,选择 最小 的 id 。如果 没有满足条件的房间 ,答案为 -13.请你返回长度为 k 的数组 answer ,其中 answer[j] 为第 j 个查询的结果。

思路

  • 先把rooms进行排序,然后对queries进行循环
  • 使用二分法 找到rooms里面 最小的支持item的size的下标(这里我认为是可以使用findIndex的,但是findIndex方法在力扣里面超出时间限制了) 二分法和findIndex 原理相同,都是找最小支持item的size下标 但是findIndex的判断简单一点
  • 找到最小支持的下标,然后进行循环找到最小的值就可以了

代码

 var closestRoom = function (rooms, queries) {rooms.sort((a, b) => a[1] - b[1]);let res = queries.map((item) => {return handleGetMin(item[0], item[1], rooms);});return res;};function handleGetMin(id, size, rooms) {// 二分开始let left = 0;let right = rooms.length - 1;while (left < right) {let mid = (left + right) >> 1;if (rooms[mid][1] >= size) {right = mid;} else {left = mid + 1;}}if (left === rooms.length - 1) {if (rooms[left][1] >= size) {return rooms[left][0];} else {return -1;}}let minIndex = left;//二分结束 + 判断结束// findIndex的方法  开始// let findIndex = rooms.findIndex((item) => item[1] >= size);// if (findIndex < 0) return -1;// let minIndex = findIndex;// findIndex的方法 结束let nearObj = {id: rooms[minIndex][0],abs: Math.abs(id - rooms[minIndex][0]),};for (let i = minIndex + 1; i < rooms.length; i++) {let tap = Math.abs(id - rooms[i][0]);if (tap < nearObj.abs) {nearObj = {id: rooms[i][0],abs: Math.abs(id - rooms[i][0]),};} else if (tap === nearObj.abs) {nearObj.id = Math.min(nearObj.id, rooms[i][0]);}}return nearObj.id;}// 这边模拟器了一下,l的值不会超过ccc.length-1,最大值就是 ccc.length-1let ccc = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];let l = 0;let r = ccc.length - 1;while (l < r) {let mid = (l + r) >> 1;if (mid >= 50) {r = mid;} else {l = mid + 1;}}console.log("结果", l);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com