程序员面试金典——18.5单词最近的距离
Solution1:我的答案,时间复杂度为 O(n2) O ( n 2 ) .
class Distance {
public:
int getDistance(vector<string> article, int n, string x, string y) {
// write code here
int diff = INT_MAX, min_diff = 0, diff_left = 0, diff_right = 0;
for (int i = 0; i < n; i++) {
diff_left = INT_MAX;
diff_right = INT_MAX;
if(article[i] == x) {
for (int j = i - 1; j >= 0; j--) {
if(article[j] == y) {
diff_left = i - j;
break;
}
}
for (int k = i + 1; k < n; k++) {
if(article[k] == y) {
diff_right = k - i;
break;
}
}
min_diff = min(diff_left, diff_right);
diff = min(diff, min_diff);
}
}
return diff;
}
};
Solution2:
时间复杂度为
O(n)
O
(
n
)
其思路是把solution1中的答案稍微优化了一下,妙哉~妙哉~
class Distance {
public:
int getDistance(vector<string> article, int n, string x, string y) {
// write code here
int px = -1, py = -1, result = n;
for (int i = 0; i < n; i++) {
if (article[i] == x)
px = i;
else if (article[i] == y)
py = i;
if (px != -1 && py != -1)//确保x和y都至少找到了一个。
result = min(abs(px - py), result);
}
return result;
}
};