算法与数据结构5.1 Just Sort
★实验任务
给定两个序列 a b,序列 a 原先是一个单调递增的正数序列,但是由于某些 原因,使得序列乱序了,并且一些数丢失了(用 0 表示)。经过数据恢复后,找 到了正数序列 b ,且序列 a 中 0 的个数等于序列 b 的个数,打算使用序列 b 恢 复序列 a 。
对于序列 a 来说,我们可以交换两个位置上的非零的数,并且可以交换任意 次。序列 b 同样也可以进行任意次交换。
现在要将序列 b 填充到序列 a 中的值丢失的位置上,序列 b 中的每个数只能 填充一次,问最后构成的序列是否是单调递增的,如果是,则输出填充后的序列, 否则输出-1。
★数据输入
输入给定 N M,表示序列 a 和序列 b 的长度。 第一行为序列 a ,第二行为 序列 b。 题目保证除了 0 以外的数,在序列 a 和 b 中只出现一次。
数据保证: 80%的数据,N, M <= 100
100%的数据,N, M <= 100000, 0 <= a[i] <= 100000, 0 < b[i] <= 100000
★数据输出
如果最后序列 a 是单调递增的,输出该序列,否则输出-1。
输入示例 | 输出示例 |
---|---|
4 2 0 11 0 15 1 12 |
1 11 12 15 |
输入示例 | 输出示例 |
---|---|
4 2 0 0 11 15 1 12 |
-1 |
思路
将第一次输入的序列中的非零数取出来存入数组b,并将位置标记为-1,将取出的数组b和后输入的序列排序后,按照标记(0和-1)填入数组,判断是否递增即可。
但是这道题我得到了十个SO,原因是在main函数里开了3个100000的数组导致。
Code
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
int partition(int *arr,int l,int r);
void swap(int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void quicksort(int *arr,int l,int r)
{
int i;
if(l>=r)return;
i=partition(arr,l,r); //找到中间数
// cout<<i<<endl;
quicksort(arr,l,i-1); //对左半边排序
quicksort(arr,i+1,r); //对右半边排序
}
int partition(int *arr,int l,int r)
{
int v=l;
int x=arr[v];
int i=l;
int j=r+1;
while(1)
{
while(i+1<=r)
{
if(arr[i+1]<x)
{
i++;
}
else
{
i++;
break;
}
}
while(j-1>=l)
{
if(arr[j-1]>x)
{
j--;
}
else
{
j--;
break;
}
}
if(i>=j)break;
swap(arr[i],arr[j]);
}
swap(arr[v],arr[j]);
return j;
}
int main()
{
int a[100001],b[100001],c[100001];
int m,n,i,j,flag=0;
scanf("%d %d",&m,&n);
for(i=0,j=0;i<m;i++)
{
scanf("%d",&a[i]);
if(a[i]!=0)
{
b[j++]=a[i];
a[i]=-1;
}
}
// for(i=0;i<m;i++)
// printf("%d",a[i]);
// printf("\n");
// for(i=0;i<j;i++)
// printf("%d",b[i]);
// printf("\n");
for(i=0;i<n;i++)
scanf("%d",&c[i]);
quicksort(b,0,j-1);
quicksort(c,0,n-1);
// for(i=0;i<j;i++)
// printf("%d ",b[i]);
// printf("\n");
// for(i=0;i<n;i++)
// printf("%d ",c[i]);
// printf("\n");
int x=0,y=0;
for(i=0;i<m;i++)
{
if(a[i]==0)
{
a[i]=c[x++];
}
else
{
a[i]=b[y++];
}
}
// for(i=0;i<m;i++)
// printf("%d ",a[i]);
// printf("\n");
for(i=0;i<m-1;i++)
{
if(a[i]>a[i+1])
{
flag=1;
break;
}
}
if(flag)
{
printf("-1");
}
else
{
for(i=0;i<m;i++)
printf("%d ",a[i]);
}
return 0;
}
算法与数据结构5.1 Just Sort的更多相关文章
- 算法与数据结构5.2 Bubble Sort
★实验任务 给定一个 1~N 的排列 P,即 1 到 N 中的每个数在 P 都只出现一次. 现在要 对排列 P 进行冒泡排序,代码如下: for (int i = 1; i <= N; ++i) ...
- JS中的算法与数据结构——排序(Sort)(转)
排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...
- JS中的算法与数据结构——排序(Sort)
排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...
- LeetCode_算法及数据结构覆盖统计
[输入]共计151道题的算法&数据结构基础数据 (见附录A) [输出-算法]其中有算法记录的共计 97道 ,统计后 结果如下 top3(递归,动态规划,回溯) 递归 动态规划 回溯 BFS ...
- 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中
//数据结构与算法基础题1:线性表操作,实现A并B,结果放入A中 #include "stdafx.h" #include <iostream> #include &l ...
- [Oracle] 关系型数据库排序算法和数据结构以及关联查询
关系型数据库排序算法和数据结构以及关联查询 1. Merge sort 理解merge sort算法将有助于更好地理解数据库join操作 - merge join 算法逻辑 将2个有序的大小为N/2的 ...
- 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority queue)
堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...
- 算法与数据结构基础 - 广度优先搜索(BFS)
BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离.由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数 ...
- 算法与数据结构基础 - 哈希表(Hash Table)
Hash Table基础 哈希表(Hash Table)是常用的数据结构,其运用哈希函数(hash function)实现映射,内部使用开放定址.拉链法等方式解决哈希冲突,使得读写时间复杂度平均为O( ...
随机推荐
- python开发的学生管理系统
python开发的学生管理系统(基础版) #定义一个函数,显示可以使用的功能列表给用户 def showInfo(): print("-"*30) print(" 学生管 ...
- JQuery制作网页——第五章 初识 jQuery
1.jQuery简介: ● jQuery由美国人John Resig于2006年创建 ● jQuery是目前最流行的JavaScript程序库,它是对JavaScript对象和函数的封装 ● 它的设计 ...
- python反射怎么用
反射: 通过字符串的形式对 对象 进行增删改查 setattr 设置某个属性的值 class A(object): def __init__(self): self.name = "sath ...
- 慕课笔记-JavaScript正则表达式
目录 慕课笔记-JavaScript正则表达式笔记 概述 RegExp对象 修饰符 元字符 字符类 范围类 预定义类 预定义字符 边界 量词 贪婪模式 分组 或(使用竖线表示) 反向引用 忽略分组 前 ...
- 部署laravel项目
1 先登录到服务器上,将代码克隆下来 git clone 项目地址 2 避免composer太慢,启用本镜像服务 可以先安装 apt-get install zip,unzip,php7.0-zip ...
- python学习第一天 -----2019年4月15日
第一周-第06章节-Python3.5-第一个python程序 #!/usr/bin/env python #-*- coding:utf-8 _*- """ @auth ...
- SaltStack error: No module named 'salt'
启动saltstack的时候出现下面的错误 问题原因 是因为我在centos7中安装了多版本的python导致的 解决方案 将文件下面文件首行更改成python2 [root@saltstack-12 ...
- idea自动生成testNG.xml
下载插件 Create TestNG Xml 安装插件 重启后就可以生成testNG.xml,打开xml,ctrl + ALT + L,格式化一下
- Shuffling Machine
7-43 Shuffling Machine(20 分) Shuffling is a procedure used to randomize a deck of playing cards. Bec ...
- github上的golang双向rpc,基于原生“net/rpc”库实现,可以注册回调
github上的golang双向rpc,基于原生“net/rpc”库实现,可以注册回调.仅支持一个server和一个client交互. 地址:https://github.com/rocket049/ ...