练习coding~

//@duanby 小顶堆. 选K小元素放入result数组中.
void GetLargetstNNum(int array[],int result[],int length, int K)
{
	priority_queue<int,vector<int>,greater<int> > heap;
	int i;
	for (i=0;i<length;++i)
	{
		heap.push(array[i]);
	}

	for (i=0;i<K;++i)
	{
		result[i]=heap.top();
		heap.pop();
	}
}


//小米笔试,给一个浮点数序列,取最大乘积子序列的值,例如  -2.5, 4, 0,
//3,0.5,8,-1,则取出的最大乘积子序列为 3,0.5,8。
int max___(int a, int b)
{
	return a>b?a:b;
}
static double MaxMulSeqCore(double array[],int start, int end)
{
	if (start > end)
	{
		return 0.0;
	}

	int mid = start +((end-start)>>1);
	double leftMax = MaxMulSeqCore(array,start,mid-1);
	double rightMax = MaxMulSeqCore(array,mid+1,end);

	double midMax=array[mid],midMaxTemp=array[mid];
	double temp;
	int i;

	for (i=mid-1;i>start;i--)
	{
		midMaxTemp *= array[i] ;
		if (midMaxTemp>midMax )
		{
			midMax=midMaxTemp;		
		}
	}
	midMaxTemp=midMax;
	for (i=mid+1;i<end;i++)
	{
		midMaxTemp *=array[i];
		if (midMaxTemp>midMax)
		{
			midMax=midMaxTemp;
		}
	}
	
	return max___(max___(leftMax,rightMax),midMax);
}
double MaxMulSeq(double array[],int length)
{
	if (NULL == array || length <= 0)
	{
		return 0.0;
	}
	return MaxMulSeqCore(array,0,length-1);
}

typedef int ElemType;
typedef struct node {
	ElemType value;
	node *next;
}Node,*LinkList;
//@duanby 反转链表
Node *ReverseLinkList(LinkList &head)
{
	if (NULL == head || NULL == head->next)
	{
		return head;
	}
	Node *reverse = ReverseLinkList(head->next);
	head->next->next=head;
	head->next=NULL;
	return reverse;
}
//@duanby 合并链表
Node *MergeLinkList(LinkList &head1, LinkList &head2)
{
	if (NULL == head1)
	{
		return head2;
	}
	if (NULL == head2)
	{
		return head1;
	}
	Node *mergeHead = NULL;
	if (head1->value > head2->value)
	{
		mergeHead=head1;
		mergeHead->next=MergeLinkList(head1->next,head2);
	}
	else
	{
		mergeHead=head2;
		mergeHead->next=MergeLinkList(head1,head2->next);
	}

	return mergeHead;

}
//创建链表
void CreateLinkList(LinkList &head)
{
	int data;
	cin >> data ;
	while (0 != data)
	{
		Node *newNode  = new Node;
		newNode->value = data;
		newNode->next = NULL;

		if (NULL==head)
		{
			head=newNode;
		}
		else
		{
			newNode->next=head;
			head=newNode;
		}
		cin >> data;
	}
}
//打印链表
void PrintLinkList(LinkList head)
{
	Node *start = head;
	while (start != NULL)
	{
		cout << start->value<<" ";
		start=start->next;
	}
	cout <<endl;
}
int main()
{
	LinkList head1 = NULL,head2=NULL,mergeHead=NULL;
	CreateLinkList(head1); // 降序
	cout << "head1 finish\n";
	PrintLinkList(head1);

	CreateLinkList(head2); //升序
	cout << "head2 finish\n";
	PrintLinkList(head2);

	head2 = ReverseLinkList(head2); //反转,使其降序
	PrintLinkList(head2);

	mergeHead=MergeLinkList(head1,head2);//合并
	PrintLinkList(mergeHead);
}

typedef char VertexType;
typedef int EdgeType;

#define  MAXVEX 100
#define  INFINITY 65536

//邻接矩阵
typedef struct
{
	VertexType vex[MAXVEX];
	EdgeType arc[MAXVEX][MAXVEX];
	int numVertexs,numEdges;
}MGraph;

void CreateGrap(MGraph *G)
{
	cout << "输出顶点数,边数:"<<endl;
	cin >> G->numVertexs>>G->numEdges;
	int i,j;
	for (i=0;i<G->numVertexs;++i)
	{
		cin>>G->vex[i];
	}
	for (i=0;i<G->numVertexs;++i)
	{
		for (j=0;j<G->numVertexs;++j)
		{
			G->arc[i][j]=INT_MAX;
		}
	}
	int k,w;
	for (k=0;k<G->numEdges;k++)
	{
		cout << "输入边(vi,vj)的i,j和权值w:"<<endl;
		cin>>i>>j>>w;
		G->arc[i][j]=w;
		G->arc[j][i]=G->arc[i][j];
	}
}
//end 邻接矩阵


//邻接表
typedef struct EdgeNode 
{
	int adjvex;
	EdgeType weight;
	EdgeNode *next;
};

typedef struct VertexNode
{
	VertexType data;
	EdgeNode *firstedge;
};

typedef struct 
{
	VertexNode adjList[MAXVEX];
	int numVertexs,numEdges;
}GraphAdjList;

void CreateGrapAdj(GraphAdjList *G)
{
	int i,j,k;
	cout << "输入顶点数,边数:"<<endl;
	cin >> G->numVertexs >> G->numEdges;

	for (i=0;i<G->numVertexs;++i)
	{
		cin>>G->adjList[i].data;
		G->adjList[i].firstedge=NULL;
	}
	EdgeNode *e;
	for (k=0;k<G->numEdges;++k)
	{
		cout << "输入边(vi,vj)顶点序号"<<endl;
		cin >> i>>j;
		e=new EdgeNode;
		e->adjvex=j;
		e->next=G->adjList[i].firstedge;
		G->adjList[i].firstedge=e;
		e=new EdgeNode;
		e->adjvex=i;
		e->next=G->adjList[j].firstedge;
		G->adjList[j].firstedge=e;
	}
}
//end 邻接表


void AnswerPermutation(char *arr,int length,int start)
{
	if (NULL == arr || length <= 0)
	{
		return;
	}
	
	if (start == length)
	{
		for (int i = 0 ; i < length;++i)
		{
			cout << arr[i]<< " ";
		}
		cout <<endl;
	}
	else
	{
		for (int i = start;i<length;++i)
		{
			char temp = *(arr+i);
			*(arr+i) = *(arr+start);
			*(arr+start)=temp;
			AnswerPermutation(arr,length,start+1);
			temp = *(arr+i);
			*(arr+i) = *(arr+start);
			*(arr+start)=temp;
		}
	}
}


void AnswerCombination(char *arr, int num, vector<char> &ivec)
{
	if (NULL == arr )
	{
		return;
	}
	if (0==num)
	{
		copy(ivec.begin(),ivec.end(),ostream_iterator<char>(cout," "));
		cout <<endl;
		return;
	}
	if (*arr == '\0')
	{
		return;
	}
	ivec.push_back(*arr);
	AnswerCombination(arr+1,num-1,ivec);
	ivec.pop_back();
	AnswerCombination(arr+1,num,ivec);
}


//ab**cd**e*12 ----> *****abcde12
void SwapString(char array[],int length)
{
	if (NULL == array || length <= 0)
	{
		return ;
	}

	int posEnd = length - 1;
	int cur = length - 1;

	while (posEnd >= 0)
	{
		if (array[posEnd]=='*')
		{
			posEnd--;
			continue;
		}
		else
		{
			char temp = array[posEnd];
			array[posEnd]=array[cur];
			array[cur] = temp;
			posEnd--;
			cur--;
		}
	}

}

//1234 xyz , 34 ---> 34 xyz
char *StrStrCore(const char *array, const char *subArray)
{
	if (NULL == array || NULL == subArray)
	{
		return NULL;
	}

	const char *startArr = array;
	const char *startSubArr = subArray;

	while (*startArr != '\0')
	{
		const char *cur = startArr;
		while (*cur == *startSubArr && *startSubArr != '\0')
		{
			cur++;startSubArr++;
		}
		if (*startSubArr == '\0')
		{
			return (char*)cur;
		}
		startArr++;
	}

	return NULL;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值