https://leetcode.com/problems/two-furthest-houses-with-different-colors/description/
给定一个长nnn数组AAA,求maxi
构造一个新数组BBB,其从左到右只含按AAA从左到右次序的不同数字,同时用一个哈希表记录AAA中每个数第一次出现的位置。接下来从右向左枚举A[i]A[i]A[i],那么离A[i]A[i]A[i]最远的数可以通过从左到右枚举BBB来找到,至多枚举两个数就能知道。代码如下:
class Solution {public:int maxDistance(vector& v) {unordered_map mp;vector vv;for (int i = 0; i < v.size(); i++)if (!mp.count(v[i])) {vv.push_back(v[i]);mp[v[i]] = i;}int res = 0;for (int i = v.size() - 1; i; i--)for (int j = 0; j < vv.size(); j++) {if (i <= mp[vv[j]]) break;if (v[i] != vv[j]) {res = max(res, i - mp[vv[j]]);break;}}return res;}
};
时空复杂度O(n)O(n)O(n)。
上一篇:数理统计笔记10:回归分析