一个有序数组中找出两个数,使得两个数的和等于X的C++实现源代码
来源:互联网 发布:stm32f103vb数据手册 编辑:程序博客网 时间:2024/05/16 08:12
第四题
一个有序数组a={1,3,6,.....,89,...,90318..}和一个数X,从数组中找出两个数,使得两个数的和等于X,要使时间复杂度尽量的低。
LZ的思路
第一个想法 二分查找,开始自己以为大概是O(NlogN),但是面试官说是O(N²),这个肯定不对;
第二个想法 用bitset,数组有的位置为1,然后循环从第一个数用X减,减出来的值如果置为了1则,则输出,不行下一个。这个是O(N)+O(N) 事件复杂度是O(N),大家有其他办法,自己说哈!
最开始的思路:
// TestSTL.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;#define XValue (94)#define Len (20)int _tmain(int argc, _TCHAR* argv[]){int MyArray[Len];memset(MyArray,0,Len);int k=0;int j=0;for (int i=0; i<100 && k<Len;i=i+j){j++;//cout << i+j << " " << endl;//输出1、3、6、10、15MyArray[k]=i+j;cout << MyArray[k] << " " << endl;k++;}int MidValue=XValue/2;for(int m=0; MyArray[m]<MidValue; m++){for(int n=k-1; MyArray[n]>=MidValue; n--){if (MyArray[m]+MyArray[n]==XValue){cout << MyArray[m] << "+" << MyArray[n] << endl;}}}system("pause");return 0;}
改进思路:变双重循环为单重循环
// TestSTL.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;#define XValue (94)#define Len (20)int _tmain(int argc, _TCHAR* argv[]){int MyArray[Len];memset(MyArray,0,Len);int k=0;int j=0;for (int i=0; i<100 && k<Len;i=i+j){j++;//cout << i+j << " " << endl;//输出1、3、6、10、15MyArray[k]=i+j;cout << MyArray[k] << " " << endl;k++;}int m=0;while (m<k-1){if (MyArray[m]+MyArray[k-1]>XValue){k--;}else if (MyArray[m]+MyArray[k-1]<XValue){m++;}else{cout << MyArray[m] << "+" << MyArray[k-1] << endl;k--;//或者m++;}}system("pause");return 0;}
0 0
- 一个有序数组中找出两个数,使得两个数的和等于X的C++实现源代码
- 给出一个数和一个有序数组,找出该数组中之和等于该数的两个数
- 在数组中找出两个数a、b,使得a加b等于给定的c
- 找出有序数组中和等于指定数的两个数
- 判断一个有序数组中是否有两个数的和等于给定的数
- 有序数组中两个数的和等于一个输入值的函数
- 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target(容易)
- 在一个数组中找两个数,使得它们的和为一个指定的数
- 一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好等于输入的那个数字
- 从数组中找出其和等于S的两个数
- 给定一个数组,从中查找是否存在两个数的和等于一个给定的x
- 关于一个数组中两个数的和等于给定数的问题
- 在数组中求出两个数,使他们的和等于给定的一个数
- 一个数组中两个数的和为N,找出这两个数字的下标
- 找出一个数组中只出现一次的两个数
- 找出数组中不同的两个数
- 找出一个有序数组中任意2数之和等于给出的第三个数
- (1/500)找出和等于给定值的两个数
- AP聚类算法
- python 中 字符串转换为数组,字典或表达式
- 在CSDN开始写博客
- Android OpenGL 学习笔记 --开始篇
- 在VS 2012中把包应用程序的步骤
- 一个有序数组中找出两个数,使得两个数的和等于X的C++实现源代码
- eclipse中为了format的代码更加好看,少换行,可以设置java、xml、jsp的代码line width。
- 更新DataSet,遇到“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成
- 100习惯,明天开始,第一目标,j2se完成。
- 你很幸运娶了我
- 静态库与动态库
- 多分支开发策略
- 经验之谈
- ubifs