方法一:枚举法。该方法是最容易、也是最简单的方法,枚举出数组A和数组B中所有的元素对,判断其和是否为c,如果是,则输出。

方法二:排序+二分查找法。首先,对两个数组中长度较大数组,不妨设为A,排序;然后,对于B中每个元素B[i]在A中二分查找c-B[i],如果找到,直接输出。

方法三:排序+线性扫描法。首先,对A和B进行排序;然后用指针p从头扫描A,用指针q从尾扫描B,如果A[p]+B[q]==c,则输出A[p]+B[q],且p++,q--;如果A[p]+B[q]>c,则q--;否则p++。
    代码如下:

#include "stdafx.h"
#include <stdio.h>
void sortArray(int a[], int n)
{
if (a == NULL || n <= 0)
printf("数组中无元素,排个毛啊。");
else
{
int temp;
for (int i = 0; i < n-1; i++)
{
for (int j = i + 1; j < n; j++)
{
if (a[i]>a[j])
{
a[i] = a[i] ^ a[j];
a[j] = a[j] ^ a[i];
a[i] = a[i] ^ a[j];
}
}
}
}
}
void findCouple(int a[], int b[], int An, int Bn,int sum)
{
if (a == NULL || An <= 0 || b == NULL || Bn <= 0)
printf("数组中无元素,找个毛啊。");
else
{
for (int i = 0, j = Bn - 1; i < An, j >= 0;)
{
if (a[i] + b[j]>sum)
j--;
if (a[i] + b[j] == sum)
{
printf("%d,%d\n", a[i], b[j]);
i++;
j--;
}
if (a[i] + b[j] < sum)
i++;
}
}
}
void main()
{
int a[] = {1,3,1,5,2,0};
int b[] = { 1, 4, 3, 1, 0, 1 };
int An = sizeof(a) / sizeof(int);
int Bn = sizeof(b) / sizeof(int);
sortArray(a, An);
sortArray(b, Bn);
findCouple(a, b, An, Bn, 6);
getchar();
}

  效果如图:

方法四:Hash法。首先,将两个数组中长度较小的数组,不妨设为A,保存到哈希表中,然后,对于B中每个元素B[i],也采用相同的hash算法在哈希表中查找c-B[i]是否存在,如果存在,则输出.时间复杂度为O(m+n),空间复杂度为O(min{m,n})。但这种算法有个问题,就是会出现重复。

代码如下:

#include "stdafx.h"
#include <iostream>
#include <map>
using namespace std;
void print_pairs_with_sum2(int A[], int B[], int m, int n, int sum)
{
map<int, bool> hash_table;
int *psmaller = A;
int *pbigger = B;
int nsmaller = (m >= n) ? n : m;
int nbigger = (m >= n) ? m : n;
if (m > n)
{
psmaller = B;
pbigger = A;
}
for (int i = 0; i < nsmaller; i++)
{
hash_table.insert(pair<int, bool>(psmaller[i], true));
}
for (int i = 0; i < nbigger; i++)
{
if (hash_table.find(sum - pbigger[i])!= hash_table.end())
{
cout << "(" << pbigger[i] << "," << sum - pbigger[i] << ")" << endl;
}
}
}
void main()
{
int a[] = { 1, 5, 4, 3, 2, 0 };
int b[] = { 1, 4, 3, 1, 0, 1 ,};
int m = sizeof(a) / sizeof(int);
int n = sizeof(b) / sizeof(int);
print_pairs_with_sum2(a, b, m, n, 6);
getchar();
}

  效果如图:

已知大小分别为m、n的两个无序数组A、B和一个常数c,求满足A[i]+B[j]=c的所有A[i]和B[j]的更多相关文章

  1. WCF 已知类型和泛型解析程序 KnownType

    数据协定继承 已知类型和泛型解析程序 Juval Lowy 下载代码示例 自首次发布以来,Windows Communication Foundation (WCF) 开发人员便必须处理数据协定继承方 ...

  2. 已知ip地址和其子网掩码如何求网络号子网号主机号

    已知ip地址为10.130.89.95,其子网掩码为255.255.255.224,求其网络号.子网号和主机号. 要看子网掩码变长在第几节,255.255.255.224是在第四节借了位 把224转换 ...

  3. 如何在在页面中清除一个已知的cookie?

    前些天在写一个项目的时候,使用cookie来存储一些用户数据,在用户登出时需要清理以往的数据,对于一个初学者来说,我需要学习如何清除一个已知的cookie. 首先,引入两个js文件: 1.jquery ...

  4. 对象布局已知时 C++ 对象指针的转换时地址调整

    在我调试和研究 netscape 系浏览器插件开发时,注意到了这个问题.即,在对象布局已知(即对象之间具有继承关系)时,不同类型对象的指针进行转换(不管是隐式的从下向上转换,还是强制的从上到下转换)时 ...

  5. 布局:高度已知,布局一个三栏布局,左栏和右栏宽度为200px,中间自适应

    需求:高度已知为200px,写出三栏布局,左栏和右栏各位200px,中间自适应,如下图所示: 方法一:float浮动布局 原理是:定义三个区块,需要注意的是中间的区块放在右边区块的下面,统一设置高度为 ...

  6. Notes 和 Domino 已知限制

    Notes 和 Domino 已知限制 功能测试 限制数据库的最大大小是多少? 最大的 OS 文件大小限制 -(最大为 64GB)文本域的最大大小是多少? 15KB(存储):15KB,显示在视图列中R ...

  7. 面试题: 已知一个含有n个不同元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的)

    TX面试题2: 已知一个含有n个元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的) 题目分析, 为了便于说明,不妨将问题简化一下: 已知一个盒子中有n个不同的球,分别标记为{a1,a2,. ...

  8. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  9. 已知词频生成词云图(数据库到生成词云)--generate_from_frequencies(WordCloud)

    词云图是根据词出现的频率生成词云,词的字体大小表现了其频率大小. 写在前面: 用wc.generate(text)直接生成词频的方法使用很多,所以不再赘述. 但是对于根据generate_from_f ...

随机推荐

  1. CentOS防SYN攻击

    netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 ESTABLISHED 59 CONNECTED 589 SYN_RECV 15 S ...

  2. Hive Tuning(五) 标准调优清单

    Hive的标准调优清单,我们可以对照着来做我们的查询优化!

  3. OpenSceneGraph-3.2.0 源代码的编辑步骤

    到osg官网去下载源代码 官网 再把资源包下载下来叫作3dpart资源包. 源代码下载下来之后依照这个步骤来. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ ...

  4. Servlet 全局验证是否登录

    Java过滤器的使用和拦截排除的实现 http://blog.csdn.net/kyunchen/article/details/52187514

  5. kindle书摘-围城-相爱勿相伤

    https://github.com/starrtc/android-demo 围城(爱熄灭了灯,心围一座城.出版七十周年纪念版) (钱钟书) - 您在位置 #49-49的标注 | 添加于 2018年 ...

  6. 一圖讓你看懂javascript原型鏈

    每個對象的原型(protype)是一個對象 每個對象都有一個內置屬性protype(__pro__)指向一個對象

  7. 【转】MySQL分库分表数据迁移工具的设计与实现

    一.背景 MySQL作为最流行的关系型数据库产品之一,当数据规模增大遭遇性能瓶颈时,最容易想到的解决方案就是分库分表.无论是进行水平拆分还是垂直拆分,第一步必然需要数据迁移与同步.由此可以衍生出一系列 ...

  8. Enums and Lookup Tables with EF Code First

    With EntityFramework’s support for enums, there is no longer any need to include lookup tables in th ...

  9. SpannableString

    http://blog.csdn.net/fengkuanghun/article/details/7904284 背景介绍 在开发应用过程中经常会遇到显示一些不同的字体风格的信息犹如默认的LockS ...

  10. linux之sshfs

    1.挂载 sshfs -p shiyu@ml.cs.tsinghua.edu.cn:/mfs/shiyu/ ~/mfs 2.卸载 fusermount -u ~/mfs