接雨水-算法题

 

#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define MAX 12
//lintcode water area question 
int main(int argc, char** argv) {
	//build water and black area
	int a[MAX]={0,1,0,2,1,0,1,3,2,1,2,1};
	int maxNumber=0;
	int maxNumberPos=0;
	int rootNode=0;
	int areaWater=0;
	for(int i=0;i<12;i++)
	{
	if (a[i]>maxNumber)
	{
		maxNumber=a[i];
		maxNumberPos=i;
	}
	}
	//find max number and postion
	printf("%d,Pos:%d\n",maxNumber,maxNumberPos);
	rootNode=a[0];//auto rootNode value 
	for(int i=0;i<maxNumberPos;i++)
	{
		if (rootNode<a[i])
		rootNode=a[i];
		else
		areaWater +=(rootNode-a[i]);
	}
	printf("Result areaWater: %d\n",areaWater);
	rootNode=a[MAX-1];//auto rootNode value 
	for(int i=MAX-1;i>maxNumberPos;i--)
	{
		if (rootNode<a[i])
		rootNode=a[i];
		else
		areaWater +=(rootNode-a[i]);
	}
	printf("Result areaWater: %d\n",areaWater);
	system("pause");
	return 0;
}




//for next code

  两个指针夹逼的办法实现

 

复杂度O(n)空间复杂度O(1)

时隔2年没有编写C code 手写一遍算法 没报错

posted on 2015-07-16 18:40  winters1992x  阅读(341)  评论(0编辑  收藏  举报

导航