阿里笔试题,乱序序列的保序输出。

按自己的思想简单写了一下,多多交流。

#include "stdafx.h"
int insertInOrder(int *a,int num,int len){//这个方法可以改进很多,插入数据,再进行排序。
	int position;
	if (a[0]==0)
	{
		a[0] = num;
		position = 1;
	}
	for (int i = 0; i < len-1;i++)
	{
		if (num>a[i] && num<a[i + 1])
		{
			position = i + 2;
			for (int j = len-1; j > i+1;j--)
			{
				a[j] = a[j-1];
			}
			a[i+1] = num;
			break;
		}
		if (num>a[i] && 0 == a[i + 1])
		{
			position = i + 2;
			a[i + 1] = num;
			break;
		}

	}
	return position;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int a[100] = { 0 };
	int b[] = { 1, 2, 5, 8, 10, 4, 3, 6, 9, 7};
	int count = 0;
	int i = 0;
	int position;//刚开始的时候想把position从1开始,也带了很多不便。
	int len = sizeof(b) / sizeof(int);
	for (i = 1; i <= len; i++){
		position = insertInOrder(a,b[i-1],i);
		if (count == (position - 1) && position == a[position - 1])
		{
			printf("%d,", a[position - 1]);
			count++;
			for (int j = position + 1; j <= len; j++)
			{
				if (a[j-1]==0)
				{
					break;
				}
				if (count == (j - 1) && j == a[j - 1])
				{
					count++;
					//i++;
					printf("%d,", a[j-1]);
				}
			}
			printf("\n");
		}
	}
	return 0;
}
<img src="http://img.blog.csdn.net/20150402234047745?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTQyNjM0MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
时间: 2024-10-31 06:41:39

阿里笔试题,乱序序列的保序输出。的相关文章

阿里笔试题(2015)持续更新中

第一次做阿里笔试题,除了ACM题之外从来没有做过校招网络题呀,完全是裸考,总体感觉吧,对于我来说,感觉时间不够用,不是题不会,感觉时间紧,大脑很混乱,总结这一次的笔试题 废话不多说,直接上题和答案 平均每个人逗留时间为20分钟,那么开场前20分钟一共来了400人,且有20个人逗留时间已经到,但他们不一定出去,注意是平均时间,所有博物馆最少应该容纳500人 双向循环列表,从任何一个元素开始可以遍历全部元素 先和后面的元素相连 s->next=p->next; p->next->pre

阿里笔试题记录(Android客户端部分)

阿里笔试题记录(Android客户端部分) 选择题 结果应该是选择 80,8 思路: - 指针的值都是一个个地址,而地址是用无符号整型值来表示的,也就是unsigned int.因此一个指针类型变量的大小就是unsigned int类型的大小. - 64位系统,一个地址占用的二进制位数为64(8字节),32位系统,地址的二进制位数32(4字节).参考64位操作系统的指针不都是64位吗 32位cpu和64位cpu,这个位数指的是数据字长,而不是地址字长.两者没有必然的数值上的联系.处理器字长是指处

阿里笔试题-派生类构造函数 创建顺序

派生类 与基类的关系: (1)创建构造函数的顺序 :基类构造函数(注意此处基类的成员不能初始化) ==>派生类成员初始化 ==>派生类构造函数 (2)派生类的构造函数 中 基类的构造函数默认在第一条,如果不写super(),则默认在第一条,注意位置不能颠倒 (3)派生类可以继承全部的基类的构造函数 阿里笔试题 举个栗子: 1 package com.test; 2 3 public class DispatchTest { 4 5 public static void main(String[

先序序列和后序序列并不能唯一确定二叉树

数据结构的基础知识中重要的一点就是能否根据两种不同遍历序列的组合(有三种:先序+中序,先序+后序,中序+后序),唯一的确定一棵二叉树.然后就是根据二叉树的不同遍历序列(先序.中序.后序),重构二叉树.显然,这三种组合并不是都能唯一确定二叉树的,其中先序+后序就不能唯一确定一棵二叉树,其他两种组合可以唯一的确定一颗二叉树. 由先序序列和后序序列不能唯一确定一棵二叉树,因无法确定左右子树两部分. 反例:任何结点只有左子树的二叉树和任何结点只有右子树的二叉树,其前序序列相同,后序序列相同,但却是两棵不

根据二叉树的先序序列和中序序列还原二叉树并打印后序序列

#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; struct Node { int value; Node *left; Node *right; Node(int value) { this->value = value; left = right = NULL; } }; bool bNotTree = false; Node* RebuildTree(i

hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)

http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4210    Accepted Submission(s): 1908 Problem Description A binary tree is a

二叉树先序序列和中序序列求解树

这种题一般有二种形式,共同点是都已知中序序列.如果没有中序序列,是无法唯一确定一棵树的. <1>已知二叉树的前序序列和中序序列,求解树. 1.确定树的根节点.树根是当前树中所有元素在前序遍历中最先出现的元素. 2.求解树的子树.找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树.若根节点左边或右边为空,则该方向子树为空:若根节点 边和右边都为空,则根节点已经为叶子节点. 3.递归求解树.将左子树和右子树分别看成一棵二叉树,重复1.2.3步,直到所有的节点完成定

通过二叉树的中序序列和后序序列获取前序序列

二叉树的遍历方式常见的三种是:先序遍历(ABC).中序遍历(BAC).后序遍历(BCA) 先序遍历: 若二叉树为空,则空操作:否则: 访问根结点; 先序遍历左子树: 先序遍历右子树. 中序遍历: 若二叉树为空,则空操作:否则: 中序遍历左子树: 访问根结点: 中序遍历右子树. 后序遍历: 若二叉树为空,则空操作:否则: 后序遍历左子树: 后序遍历右子树: 访问根结点. 在学习到 根据遍历序列确定二叉树 时,知道了:可以通过二叉树的先中或者中后遍历序列唯一确定一棵二叉树. 根据算法描述 使用jav

图的建立及输出其先序序列,中序序列,后续序列

1 #include<stdio.h> 2 #include<malloc.h> 3 typedef struct node{ 4 char data; 5 struct node *left; 6 struct node *right; 7 }Node; 8 9 int i = 0; 10 char str[100]; 11 12 void create(Node** p){ 13 if(str[i] == '\0') 14 return ; 15 if(str[i++] !=