給出乙個只包含0和1的二維矩陣,找出最大的全部元素都是1的長方形區域,返回該區域的面積。
思路:原想的是記下每個點的長度和高度就行了,然後相乘。但是想想下面的行需要知道上面的行開始的節點是否有用,所以要記下每個節點所在的連續線上最左邊開始的位置是**。然後用右邊減去即可。
<?php
function maximalrectangle($arrmatrix)
$rows = count($arrmatrix);
$cols = count($arrmatrix[0]);
//想要求面積有三個值,左右及高度
$arrheight = array();//儲存每個列的高度,出現0,就從0再開始
$arrleft = array();//儲存每個行的連續左開始,各個行比較,只儲存最大的
$arrright = array();//儲存每個行的連續右結束,各個行比較,只儲存最小的
for ($i = 0; $i < $cols; $i ++)
$curleft = 0;//當前的連續最左節點
$curright = 0;//當前的連續最右節點
$max = 0;//最大面積
foreach ($arrmatrix as $arrrow) else
}//注意這個右邊界需要逆向來獲得
for ($key = $cols - 1; $key >= 0; $key --) else
}foreach ($arrrow as $key => $value)
print json_encode($arrheight). json_encode($arrleft) . json_encode($arrright) . "\n";
}return $max;
}$arr = [
[0,1,1,1,0],
[1,0,1,0,0],
[1,0,0,0,0],
];$ret = maximalrectangle($arr);
print $ret;
《leetCode php》分割鍊錶
給出乙個鍊錶和乙個值x,以x為參照將鍊錶劃分成兩部分,使所有小於x的節點都位於大於或等於x的節點之前。兩個部分之內的節點之間要保持的原始相對順序。例如 給出1 4 3 2 5 2和x 3,返回1 2 2 4 3 5 class node function partition head,x else ...
《leetCode php》鍊錶內部部分反轉
將乙個鍊錶m位置到n位置之間的區間反轉,要求使用原地演算法,並且在一次掃瞄之內完成反轉。例如 給出的鍊錶為1 2 3 4 5 null,m 2 n 4,返回1 4 3 2 5 null.注意 給出的m,n滿足以下條件 1 m n 鍊錶長度 class node function reversebet...
《leetCode php》查詢字串
給出乙個二維字元陣列和乙個單詞,判斷單詞是否在陣列 現,單詞由相鄰單元格的字母連線而成,相鄰單元指的是上下左右相鄰。同一單元格的字母不能多次使用。例如 給出的字元陣列 abce sfcs adee 單詞 abcced 返回 true,單詞 see 返回 true,單詞 abcb 返回 false.f...