ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1182. 与目标颜色间的最短距离(二分查找)

2022-05-09 00:35:04  阅读:220  来源: 互联网

标签:二分 颜色 1182 pos 索引 colors vector 短距离 queries


1182. 与目标颜色间的最短距离

给你一个数组 colors,里面有  12、 3 三种颜色。

我们需要在 colors 上进行一些查询操作 queries,其中每个待查项都由两个整数 i 和 c 组成。

现在请你帮忙设计一个算法,查找从索引 i 到具有目标颜色 c 的元素之间的最短距离。

如果不存在解决方案,请返回 -1

 

示例 1:

输入:colors = [1,1,2,1,3,2,2,3,3], queries = [[1,3],[2,2],[6,1]]
输出:[3,0,3]
解释: 
距离索引 1 最近的颜色 3 位于索引 4(距离为 3)。
距离索引 2 最近的颜色 2 就是它自己(距离为 0)。
距离索引 6 最近的颜色 1 位于索引 3(距离为 3)。

示例 2:

输入:colors = [1,2], queries = [[0,3]]
输出:[-1]
解释:colors 中没有颜色 3。

 

提示:

  • 1 <= colors.length <= 5*10^4
  • 1 <= colors[i] <= 3
  • 1 <= queries.length <= 5*10^4
  • queries[i].length == 2
  • 0 <= queries[i][0] < colors.length
  • 1 <= queries[i][1] <= 3
 1 class Solution {
 2 public:
 3     // 找出某种颜色所在索引集中距离pos最近的距离
 4     int findNearest(vector<int> &nums, int pos) {
 5         // 不存在这种颜色时返回-1
 6         if (nums.empty()) {
 7             return -1;
 8         }
 9         int left = 0;
10         int right = nums.size() - 1;
11         int result = INT_MAX;
12         while (left <= right) {
13             int mid = left + (right - left) / 2;
14             result = min(result, abs(nums[mid] - pos)); // 取距离pos最近距离
15             if (nums[mid] > pos) { // pos索引在区间[left, mid]
16                 right = mid - 1;
17             } else if (nums[mid] < pos) { // pos索引在区间[mid, right]
18                 left = mid + 1;
19             } else { // colors数组中该种颜色索引数组中存在与起始索引pos相同的,距离最近的就是自己
20                 return 0;
21             }
22         }
23         return result;
24     }
25     vector<int> shortestDistanceColor(vector<int>& colors, vector<vector<int>>& queries) {
26         vector<vector<int>> colorsIndexList(4, vector<int>()); // 三种颜色对应位置的列表
27         for (unsigned int i = 0; i < colors.size(); i++) {
28             colorsIndexList[colors[i]].push_back(i);
29         }
30         vector<int> ans;
31         for (auto &vec : queries) {
32             ans.push_back(findNearest(colorsIndexList[vec[1]], vec[0]));
33         }
34         return ans;
35     }
36 };

标签:二分,颜色,1182,pos,索引,colors,vector,短距离,queries
来源: https://www.cnblogs.com/MGFangel/p/16247646.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有