剑指offer5.1——O(n)的复杂度合并两个有序数组
#include"iostream"
#include"stdio.h"
using namespace std; int* ArrayMerge(int *a,int aLen,int *b,int bLen)
{
int aIndex=aLen-,bIndex=bLen-,newIndex=aLen+bLen-; while(aIndex>=&&bIndex>=)
{
if(a[aIndex]>b[bIndex])
{
a[newIndex--]=a[aIndex--];
}
else
{
a[newIndex--]=b[bIndex--];
}
}
while(aIndex>=)
{
a[newIndex--]=a[aIndex--];
}
while(bIndex>=)
{
a[newIndex--]=b[bIndex--];
}
return a;
} void Test(char *testName,int *a,int aLen,int *b,int bLen,int *res,int aMaxLen)
{
if(testName!=nullptr)
cout<<"the "<<testName<<" begin:";
if(aLen+bLen>aMaxLen)
{
cout<<"out of range!"<<endl;
return;
}
if(a==nullptr || b==nullptr)
{
cout<<"the one of two arrays is NULL!"<<endl;
return;
}
if(aLen< || bLen<)
{
cout<<"error input"<<endl;
return;
}
int *getRes=ArrayMerge(a,aLen,b,bLen);
int i;
for(i=;i<aLen+bLen;i++)
{
// cout<<getRes[i]<<" ";
if(res[i]!=getRes[i]) break;
}
if(i<aLen+bLen)
cout<<"failed!"<<endl;
else
cout<<"passed!"<<endl;
} //a数组全排在b数组前面
void Test1()
{
int a[]={,,};//一定要指定a数组的大小
int b[]={,,};
int res[]={,,,,,};
Test("Test1",a,,b,,res,);
}
//a数组和b数组混合
void Test2()
{
int a[]={,,};
int b[]={,,};
int res[]={,,,,,};
Test("Test2",a,,b,,res,);
}
//a数组为空
void Test3()
{
int a[]={};
int b[]={,,};
int res[]={,,};
Test("Test3",a,,b,,res,);
}
//b数组为空
void Test4()
{
int b[]={};
int a[]={,,};
int res[]={,,};
Test("Test4",a,,b,,res,);
} //a、b数组为空
void Test5()
{
int a[]={};
int b[]={};
int res[]={};
Test("Test5",a,,b,,res,);
}
//a、b数组为空
void Test6()
{
int *a=nullptr;
int b[]={};
int res[]={};
Test("Test6",a,,b,,res,);
}
int main()
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
return ;
}
剑指offer5.1——O(n)的复杂度合并两个有序数组的更多相关文章
- 剑指offer——python【第16题】合并两个有序链表
题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-& ...
- 《剑指offer》第二十五题(合并两个排序的链表)
// 面试题25:合并两个排序的链表 // 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 // 照递增排序的.例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链 ...
- 【剑指offer】以o(1)复杂度删除啊链表的节点,C++实现(链表)
0.简介 本文是牛客网<剑指offer>刷题笔记. 1.题目 在O(1)时间内删除链表节点. 2.思路 前提条件:删除的节点在链表上:边界条件:链表 ...
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...
- 【剑指Offer面试编程题】题目1505:两个链表的第一个公共结点--九度OJ
题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的两个链表 ...
- 剑指offer--5.用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: # 栈A用来作入队列# 栈B用来出队列,当栈B为空时,栈A全部出栈到栈B,栈B再出栈(即出队列) v ...
- 剑指offer5
题干:用两个栈实现一个队列,完成队列的push和pop操作,队列中的元素是int型 思路:首先我初始化两个栈,一个栈往里面添加数据,如果这个栈中不为空就弹出数据压入到第二个栈中,弹出第二个栈中的数据 ...
- 剑指offer5 从尾到头打印链表
错误代码: class Solution { public: vector<int> printListFromTailToHead(ListNode* head){ vector< ...
- 剑指offer--5.变态跳台阶
WA了一次,错误数据4,输出8,怎么真么熟悉呢?改个return过了,OMG ------------------------------------------------------------- ...
随机推荐
- Smarty3——foreach
foreach and foreachelse篇 foreach用于遍历数组,可以是非关联数组,与section相比要简单些,在smarty3中可以接受没有名称的属性,也可以使用smarty2有名称 ...
- Part4_lesson4---Bootloader架构设计
1.第一阶段程序设计 第二阶段程序设计
- [GO]数组指针做函数参数
package main import "fmt" //p指向实现数组a,它是指向数组,它是数组指针//*p指向指针指向的内存,就是实参a func modify1(p *[]in ...
- 编写高质量代码改善C#程序的157个建议——建议1:正确操作字符串
最近拜读了陆敏技老师的<编写高质量代码改善C#程序的157个建议>,感觉不错,决定把笔记整理一遍. 建议1: 正确操作字符串 字符串应该是所有编程语言中使用最频繁的一种基础数据类型.如果使 ...
- 关于Pascal(帕斯卡)以及Camel(驼峰)命名法
小驼峰式命名法(lower camel case): 第一个单字以小写字母开始:第二个单字的首字母大写,例如:firstName.lastName,也被称为Camel命名法. 大驼峰式命名法(uppe ...
- WinForm中DataGridView的使用(五) - 自定义列
DataGridView支持指定DataGridViewImageColumn.DataGridViewButtonColumn等特殊类型的列,加入到Columns中. DataGridViewIma ...
- .NET中的程序集
参考:http://blog.sina.com.cn/s/blog_7ade159d0102wmg9.html 程序集(Assembly,装配件,.NET程序集) 程序集是应用程序的部署单元,.NET ...
- 为openstack服务使能debug模式
Most OpenStack services use the same configuration options to enable the debug logging that is also ...
- 在ubuntu下安装KDE以及完全卸载KDE
自由转载 ^_^ 同时请注明原文出处:http://www.cnblogs.com/wangvsa/archive/2012/07/22/2603626.html 这是一篇翻译,很多不必要的东西就没翻 ...
- 关于Java中SQL语句的拼接规则
实现目标语句是这个注意,这里的java变量是idd int idd; String sql = "SELECT id, piUrl FROM picinfos WHERE id BETWEE ...