剑指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 ------------------------------------------------------------- ...
随机推荐
- Django框架 之 form组件
Django框架 之 form组件 浏览目录 Form介绍 普通的登录 使用form组件 Form详情 常用字段 校验 进阶 使用Django Form流程 一.Form介绍 我们之前在HTML页面中 ...
- 简单的Session案例 —— 一次性验证码
一次性验证码的主要目的就是为了限制人们利用工具软件来暴力猜测密码,其原理与利用Session防止表单重复提交的原理基本一样,只是将表单标识号变成了验证码的形式,并且要求用户将提示的验证码手工填写进一个 ...
- sql 存储过程返回多个值
ALTER PROCEDURE your_sp_name ASBEGIN DECLARE @a INT, @b INT, @c INT SELECT @a= COUNT(1) FRO ...
- Python 函数习题
#encoding=utf-8 from urllib.request import urlopen import random import os ''' 1. 定义一个fuc(url, folde ...
- Java IO流的回顾与梳理(必记必会必写)
- 全排列——DFS实现
原创 之间就写过一篇全排列的博客:https://www.cnblogs.com/chiweiming/p/8727164.html 详细介绍请回看,用的方法(暂且就叫)是“交换法”,其实思路就是DF ...
- Spring注解:Enable相关注解
@EnableXXX:可以用于取代xml配置中的一些配置,被该注解所标注的类,其中被@Bean标注的方法,一般就用于返回和EnableXXX的XXX相关的Bean,Bean中一般有XXX相关的注解 同 ...
- .NET MVC对接POLYV——HTML5播放器播放加密视频
官方参考文档:http://dev.polyv.net/2017/videoproduct/v-playerapi/html5player/html5-docs/ 1.上传视频之前根据自己需要对所上传 ...
- kubernetes dashboard 安装
环境:CentOS Linux release 7.3.1611 (Core)IP:192.168.0.103 [1]组件安装yum install device-mapperyum install ...
- 借助百度云API进行人脸识别
前言:本篇博客是笔者第一次使用百度云api进行人脸检测,主要内容包括两部分,一是获取接口,二是借助接口进行人脸检测.笔者也是初步了解这方面的内容,也是参考了杂七杂八的博文,内容可能存在错误及其他毛病, ...