算出兩個陣列元素彼此之間差的絕對值中最小的一個,這叫作陣列的距離。
解:
跟前面的幾題有異曲同工之妙,
當x[i]比y[j]大的時候就j++,
反之則i++,每次尋找更小的值即可。
Code大概長這樣:
#include <limits.h> int min(int x, int y) { if(x<y) return x; return y; } int min_dist(int x[], int y[], int m, int n) { // INT_MAX是limits.h裡的常數,表int的最大值。 int minimum = INT_MAX, _xi = 0, _yi = 0; while( (_xi < m) && (_yi < n) ) if(x[_xi] >= y[_yi]) { minimum = min(minimum, x[_xi]-y[_yi]); _yi++; } else { minimum = min(minimum, y[_yi]-x[_xi]); _xi++; } return minimum; }另外,其實可以加入相等的情況,直接return 0;出來,
但並不一定會比較快,相對還可能每一次迴圈都要判斷兩次。
沒有留言:
張貼留言