找出两个有序数组的交集

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4
 5 class Vector {
 6 public:
 7     Vector(int input_size) {
 8         size = input_size;
 9         length = 0;
10         data = new int[size];
11     }
12
13     ~Vector() {
14         delete[] data;
15     }
16
17     void insert(const int& value, int loc) {
18         if (loc < 0 || loc > length) {
19             return;
20         }
21         for (int i = length; i > loc ; i--) {
22             data[i] = data[i - 1];
23         }
24         data[loc] = value;
25         length ++;
26     }
27
28     int at(const int& loc) {
29         return data[loc];
30     }
31
32     int getLen() {
33         return length;
34     }
35
36     void output() {
37         cout << length << endl;
38         for (int i = 0; i < length; ++i) {
39             if (i == 0) cout << data[i];
40             else cout << " " << data[i];
41         }
42         cout << endl;
43     }
44 private:
45     int size, length;
46     int * data;
47 };
48
49
50 int main() {
51     int a, b;
52     cin >> a;
53     Vector A(a);
54     for (int i = 0; i < a; ++i) {
55         int num;
56         cin >> num;
57         A.insert(num, i);
58     }
59     cin >> b;
60     Vector B(b);
61     for (int i = 0; i < b; ++i) {
62         int num;
63         cin >> num;
64         B.insert(num, i);
65     }
66   
67     int i = 0, j = 0, k = 0;
68
69     Vector C(a);
70     while (i < A.getLen() && j < B.getLen()) {
71         if (A.at(i) == B.at(j)) {
72             C.insert(A.at(i), k ++);
73             i ++;
74             j ++;
75         } else if (A.at(i) > B.at(j)) {
76             j ++;
77         } else if (A.at(i) < B.at(j)) {
78             i ++;
79         }
80     }
81     C.output();
82
83     return 0;
84 }

其实可以用很简洁的代码实现,只是因为自己写了个顺序表类所以代码很长,重点看main函数里的while循环就可以了...

时间: 2024-09-30 10:16:37

找出两个有序数组的交集的相关文章

两个有序数组求交集

采用小的在多的进行二分查找的方法. 设两个指向两个数组末尾的指针,取较小的那个数在另一个数组中二分查找,找到,则存在一个交集,并且将该目标数组的指针指向该位置前一个位置.如果没有找到,同样可以找到一个位置,使得目标数组中在该位置后的数肯定不在另一个数组中存在,直接移动该目标数组的指针指向该位置的前一个位置,再循环找,直到一个数组为空. 其实类似归并算法的merge函数,就是交替算法来填充 if a[i]<b[j] t[num++] = a[i++]; else t[num++] = b[j++]

两个有序数组找出相同数据

两个有序数组找出相同数据,要求最简单的算法复杂度. class Program { static void Main(string[] args) { int Low = 0; int[] m = new int[] { 2, 4, 6, 9, 12, 13, 15, 16 }; int[] n = new int[] { 3, 5, 9, 12, 15 }; foreach (int item in m) { Search(n, ref Low, n.Length - 1, item); }

测试题目:两个有序数组,找出最大的五个数字组成一个新的数组

注意点: 1.输入两行的方法 2.两行输入的数量和小于5的情况 1 //评测题目: 两个有序数组,找出最大的五个数字组成一个新的数组 2 #include <iostream> 3 #include <vector> 4 #include <cstring> 5 #include <bits/stdc++.h> 6 using namespace std; 7 8 vector<int> getTop5(vector<int>&

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 示例 1: nums1 = [1, 3] nums2

两个有序数组,找第k小的数//未完

1.题目描述:a,b两个有序数组,找出第k小的数,logk,二分查找,1个小于怎么办? 2.思路: 对于数组A . B , 如果 B[pb] < A[pa] && B[pb] > A[pa - 1], 那么 B[pb] 一定是第 pa + pb + 1  小的数.比如数组A = {1, 8, 10, 20}, B = {5, 9, 22, 110},pa = 2, pb = 1, 这时,(B[pb] = 9) < (A[pa] =10) && (B[pb]

找出两个数组的相同元素,最优算法?

在做新旧接口交替过程中,遇到了老接口和新接口json数据有些不一致的情况,需要比较两个json对象,把相同的元素赋其中一个json对象中变量的值.而且其中一个json最后输出格式还需要改变下属性名,思来想去觉得和"找出两个数组相同元素"很像,所以做下总结. "有一个数组A{0,2,3,5}和一个数组B{3,5,6,2,1,1},找出这两个数组相同元素." 一开始抽象出这道题时,脑海里浮现出最简单粗暴的方法,逐一比较. //最简单粗暴的做法,逐个比较,时间复杂度为(B

[算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)

问题描述: 设计一个类,包含如下两个成员函数: Save(int input) 插入一个整数到一个整数集合里. Test(int target) 检查是否存在两个数和为输入值.如果存在着两个数,则返回true,否则返回false 允许整数集合中存在相同值的元素 分析: 与[算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)不同,这里需要算出的是存不存在这两个数,可以在上一篇的基础上修改一下数据结构,HashMap其中key是数值,value是数值个数,然后需要作两步判断,map中存在数

找出两个数组相同的元素

题目:找出两个数组(有重)相同的元素,两种方法 public class 出两个数组相同的元素 { public static void main(String[] args) { // TODO Auto-generated method stub String[] test1 = {"damon","happy","ly","good","losers"}; String[] test2 = {&quo

找出两个数组相同的元素,并且对应的个数一样

/** * 找出两个数组相同的元素,并且对应的个数一样 * @param args */ public static void getSameNumberCount(String[] a, String[] b) { Map<String, Integer> map = new HashMap<String, Integer>(); for (int i = 0; i < a.length; i++) { if (!map.containsKey(a[i])) { map.p