2019-09-25 吴亲库里 库里的深夜食堂
给定execl的行列,转换为具体的对应的数字。

给定execl的行列,转换为具体的对应的数字
/**
* @param String $s
* @return Integer
*/
function titleToNumber($s) {
$arr=[];
$arr["A"]=1;
$arr["B"]=2;
$arr["C"]=3;
$arr["D"]=4;
$arr["E"]=5;
$arr["F"]=6;
$arr["G"]=7;
$arr["H"]=8;
$arr["I"]=9;
$arr["J"]=10;
$arr["K"]=11;
$arr["L"]=12;
$arr["M"]=13;
$arr["N"]=14;
$arr["O"]=15;
$arr["P"]=16;
$arr["Q"]=17;
$arr["R"]=18;
$arr["S"]=19;
$arr["T"]=20;
$arr["U"]=21;
$arr["V"]=22;
$arr["W"]=23;
$arr["X"]=24;
$arr["Y"]=25;
$arr["Z"]=26;
$sArr=str_split($s);
$res=0;
$muttle=1;
for($i=count($sArr)-1;$i>=0;$i--){
$res +=$arr[$sArr[$i]]*$muttle;
$muttle *=26;
}
return $res;
}
我们也可以这样解,这是一个求众数(即上面所称呼的多数元素)的问题,有一种叫做摩尔投票法(Google一下)适合解这类题目。我们可以先将第一个数当成众数,然后设置计数器等于1,如果当前的数和众数等值,那么计数器加1,否则计数器减去1,如果计数器等于0的话,说明当前还不是众数的个数都和众数的个数相同了,那么我们就需要更换众数了,如果我们更换了众数,但是后面当前更换的众数又大量出现,那么他就重新变成了众数,直到验证完毕。求出众数。
/**
* @param Integer[] $nums
* @return Integer
*/
function majorityElement($nums) {
$count=1;
$current=$nums[0];
for($i=1;$i<count($nums);$i++){
$val=$nums[$i];
if($val !==$current) {
--$count;
}else{
++$count;
}
if($count==0) {
$current=$nums[$i];
$count=1;
}
}
return $current;
}
