要找出两个整型数组中不是两者共有的元素,可以使用以下方法:
排序和遍历
首先对两个数组进行排序。
然后使用两个指针分别遍历两个数组,比较当前指针所指的元素。
如果两个元素不相等,则将其中一个元素(不是共有的那个)添加到结果列表中,并移动该数组的指针。
如果两个元素相等,则两个指针都向前移动。
使用集合
将两个数组转换为集合(例如,使用C++的`std::set`)。
使用集合的差集操作来找出只在一个集合中存在的元素。
下面是一个使用排序和遍历方法的示例代码:
```cpp
include include include int main() { int n1, n2; std::cin >> n1; std::vector for (int i = 0; i < n1; ++i) { std::cin >> a[i]; } std::cin >> n2; std::vector for (int i = 0; i < n2; ++i) { std::cin >> b[i]; } // 排序两个数组 std::sort(a.begin(), a.end()); std::sort(b.begin(), b.end()); // 使用两个指针遍历数组 int i = 0, j = 0; std::vector while (i < n1 && j < n2) { if (a[i] < b[j]) { result.push_back(a[i++]); } else if (a[i] > b[j]) { result.push_back(b[j++]); } else { // 如果元素相等,则两个指针都向前移动 ++i; ++j; } } // 将剩余的元素添加到结果中 while (i < n1) { result.push_back(a[i++]); } while (j < n2) { result.push_back(b[j++]); } // 输出结果 for (int num : result) { std::cout << num << " "; } std::cout << std::endl; return 0; } ``` 这个方法的时间复杂度是 \(O(n \log n + m \log m)\),其中 \(n\) 和 \(m\) 分别是两个数组的长度。排序的时间复杂度是 \(O(n \log n)\) 和 \(O(m \log m)\),遍历的时间复杂度是 \(O(n + m)\)。