twitter 水洼题 JS版

<!DOCTYPE HTML>
<html lang="zh-CN">
<script type="text/javascript">
function E( x ){console.log(x);};
</script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<style>
*{border: 0px; margin: 0px; padding:0px;}
.main{width:80%; height:600px; margin:0px auto; position: relative;}
.main .cell{width:10%; height:10%; border:1px solid #333; position: absolute;}
.main .cell.on{background: #39f;}
</style>
<body>
<div class="main">
	
</div>
</body>
<script type="text/javascript">
var al_len = 10,
	_num = (function(){
		var _al = [];
		for(var i = 0; i < al_len; i++){
			_al.push( Math.ceil( Math.random() * 10 ) );
		};
		return _al;
	})();

function start(){
	var _t,
		_l,
		_cell = [];
	for(var i = 0 , len = _num.length; i < len; i++){
		for(var k = 0 , lenk = _num[ i ]; k < lenk; k++){
			_cell.push("<div class='cell' style='top:" + ( al_len - k ) + "0%; left:" + ( i * 10 ) + "%;'></div>");
		};
	};
	$(".main").html( _cell.join("") );
};

function count( num ){
	var _fill = {},
		_x,
		_need = 0;
	_x = function( i ){
		var _tmp_p = i,
			_tmp_n = i;
		for(var _i = i - 1 ;;_i--){
			if( _i >= 0 ){
				if( num[ _i ] > num[ _tmp_p ] ){
					_tmp_p = _i;
				};
			} else {
				if( _tmp_p == i ){ 
					return _fill[ i ] = 0;
				};
				break;
			};
		};
		for(var _i = i + 1 ;;_i++){
			if( num[ _i ] ){
				if( num[ _i ] >= num[ _tmp_n ] ){
					_tmp_n = _i;
				};
			} else {
				if( _tmp_n == i ){ 
					return _fill[ i ] = 0; 
				};
				break;
			};
		};
		_fill[ i ] = ( num[ _tmp_p ] >= num[ _tmp_n ] ) ? _tmp_n : _tmp_p;
		_fill[ i ] = num[ _fill[ i ] ] - num[ i ];
	};
	for(var i = 1; i < num.length - 1; i++){
		_x( i );
	};
	for(var a in _fill){
		_need += _fill[ a ];
	};
	E( _fill );
	return _need;
};

start();
alert( "总量" + count( _num ) );
</script>
</html>

之前在首页上看到twiiter的水洼题目

大概意思:

随机生成几个数 每个数作为一堵墙的高度。。 

然后将水倒入   求最后不会有水溢出时    

剩余总水量的大小


网上有人说可以通过一次遍历实现 。。。

不知道有木有大神愿意试试     留下代码  

让吾等众生膜拜一下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值