---
# System prepended metadata

title: '-Smallest difference'
tags: [Medium]

---

# -Smallest difference

###### tags: `Medium`
![](https://i.imgur.com/V7A0hri.png)

Q: 從兩個不一定等長的數組中找相減最小的一對數出來。

想法：先排序，再從頭互相比對，如果比對方小就拿更大的出來比，直到比完

比對過程 O(m+n)
由於用了排序，故為 O(mlog(m)+nlog(n)) 上方m+n可忽略
```cpp=
vector<int> smallestDifference(vector<int> arrayOne, vector<int> arrayTwo) {
  // Write your code here.
  sort(arrayOne.begin(), arrayOne.end());
  sort(arrayTwo.begin(), arrayTwo.end());
  int smallestNum = INT_MAX;
  vector<int> smallestPair;
  int oneIdx = 0;
  int twoIdx = 0;
  while (oneIdx < arrayOne.size() && twoIdx < arrayTwo.size()){
      if (abs(arrayOne[oneIdx] - arrayTwo[twoIdx]) < smallestNum){
          smallestNum = abs(arrayOne[oneIdx] - arrayTwo[twoIdx]);
          smallestPair = {arrayOne[oneIdx], arrayTwo[twoIdx]};
      }
      if (arrayOne[oneIdx] > arrayTwo[twoIdx])
          twoIdx++;
      else if (arrayOne[oneIdx] < arrayTwo[twoIdx])
          oneIdx++;
      else
          return vector<int>{arrayOne[oneIdx], arrayTwo[twoIdx]};
  }
  return smallestPair;
}
```
