两个数组求并集

对两个数组求并集,由于对数组的操作不是很熟悉,所以将数组中的数存到listbox中,再对listbox中的数进行操作,将相同的都删除,只留下一个,然后再将得到的数重新保存到数组输出,方法有点复杂,但是能够达到效果,也可以继续编写拓展到任意个数组求并集,也可以将数组元素的输入优化,通过直接在text控件中写入,中间用空格分开,读取的时候再用split函数将其取出,赋给数组进行后续操作,这里不再赘述。下面是源码:

Private Sub Command1_Click()
Dim A(), B(), C()
Dim Num1 As Integer, Num2 As Integer
Dim i As Integer, j As Integer, Ln As Integer
Text1 = ""
Text2 = ""
Text3 = ""
List1.Clear
On Error Resume Next
Num1 = InputBox("请输入 数组1 的元素个数", "元素个数")
ReDim A(Num1)
For i = 1 To Num1
A(i) = InputBox("请输入 数组1 的 第" & i & "个 元素", "输入元素")
Text1 = Text1 & A(i) & " "
Next i
Num2 = InputBox("请输入 数组2 的元素个数", "元素个数")
ReDim B(Num2)
For i = 1 To Num2
B(i) = InputBox("请输入 数组2 的 第" & i & "个 元素", "输入元素")
Text2 = Text2 & B(i) & " "
Next i
Ln = Num1 + Num2
ReDim C(Ln)
For i = 1 To Num1
C(i) = A(i)
Next i
For i = Num1 + 1 To Ln
C(i) = B(i - Num1)
Next i
On Error Resume Next
For i = 1 To Ln
List1.AddItem C(i)
Next i
For i = 0 To List1.ListCount - 1
For j = i + 1 To List1.ListCount - 1
If List1.List(i) = List1.List(j) Then
List1.RemoveItem (j)
j = j - 1
End If
Next j
Next i
ReDim C(List1.ListCount)
For i = 1 To List1.ListCount
C(i) = List1.List(i - 1)
Text3 = Text3 & C(i) & " "
Next i
End Sub
### 计算两个数组 为了计算两个数组,在C++中可以利用`std::set_union`函来完成这一操作。该方法需要先对输入数组进行排序,然后通过标准库算法生成结果。 以下是完整的代码实现: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; class Solution { public: vector<int> unionOfArrays(vector<int>& nums1, vector<int>& nums2) { // 对两个数组进行排序 sort(nums1.begin(), nums1.end()); sort(nums2.begin(), nums2.end()); // 定义存储的容器 vector<int> result; result.resize(nums1.size() + nums2.size()); // 预分配空间 // 使用 set_union 函 auto it = set_union(nums1.begin(), nums1.end(), nums2.begin(), nums2.end(), result.begin()); // 调整结果大小到实际使用的部分 result.erase(it, result.end()); return result; } }; // 测试代码 int main() { Solution solution; vector<int> nums1 = {1, 2, 2, 1}; vector<int> nums2 = {2, 2}; vector<int> result = solution.unionOfArrays(nums1, nums2); cout << "Union of arrays: "; for (auto& num : result) { cout << num << " "; } return 0; } ``` #### 解析 上述代码实现了两个数组功能。具体步骤如下: - **排序**:由于`std::set_union`要输入序列已排序,因此首先调用`sort()`对两组据分别排序[^6]。 - **合**:使用`std::set_union`将两个有序数组成一个新的有序数组自动去除重复项[^7]。 - **调整大小**:因为初始分配的空间可能大于实际所需,所以最后调用`erase()`移除多余的部分[^8]。 这种方法的时间复杂度主要由排序决定,假设两个数组长度分别为 \(m\) 和 \(n\),则总时间为 \(O(m \log m + n \log n)\)[^9]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值