题目: PHP 实现第一个只出现一次的字符
描述:
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
<?php
function FirstNotRepeatingChar($str)
{
$charArr = count_chars($str,1);
$index = 10000;
foreach($charArr as $k=>$v){
if($v == 1){
strpos($str, chr($k))<$index?$index = strpos($str, chr($k)):'';
}
}
if($index == 10000)
return -1;
return $index;
}
题目: PHP 实现数组中的逆序对
描述:
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。
输入一个数组,求出这个数组中的逆序对的总数P。
并将P对1000000007取模的结果输出。 即输出P%1000000007
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
示例1
输入
1,2,3,4,5,6,7,0
输出
7
<?php
function InversePairs($data)
{
return mergeSort($data) % 1000000007;
}
function mergeSort(&$arr) {
$len = count($arr);
$sum = 0;
mSort($arr, 0, $len-1, $sum);
return $sum;
}
function mSort(&$arr, $left, $right, &$sum) {
if($left < $right) {
$center = ($left+$right) >> 1;
mSort($arr, $left, $center, $sum);
mSort($arr, $center+1, $right, $sum);
mergeArray($arr, $left, $center, $right, $sum);
}
}
function mergeArray(&$arr, $l, $m, $r, &$sum) {
$i = $l;
$j = $m+1;
while($i<=$m && $j<=$r) {
if($arr[$i] <= $arr[$j]) {
$temp[] = $arr[$i++];
} else {
$sum += $m - $i + 1;
$temp[] = $arr[$j++];
}
}
while($i <= $m) {
$temp[] = $arr[$i++];
}
while($j <= $r) {
$temp[] = $arr[$j++];
}
for($i=0, $len=count($temp); $i<$len; $i++) {
$arr[$l+$i] = $temp[$i];
}
}