给定一个数组 arr,包含 n 个整数
再给定一个整数 k,可以给数组中任意整数加 1,总共可以加 k 次
加完 k 次后,找到数组中的最大值。最后要求得一个最小的最大值
public function arith1($arr, $k)
{
$diff = 0;
$max = max($arr);
$count = count($arr);
foreach ($arr as $v) {
$diff += $max - $v;
}
if ($diff > $k) {
return $max;
} else {
return $max + ceil(($k - $diff) / $count);
}
}
$arr = [1,4,5,9,21,17]; $k = 93;
echo arith1($arr,$k)
有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合
示例:输入:S = “qqe” 输出:[“eqq”,“qeq”,“qqe”]
public function arith2($s, $s2 = '')
{
$len = strlen($s);
if ($len <= 1) {
echo $s2 . $s . '<br>';
} else {
for ($i = 0; $i < $len; $i++) {
$lin = str_replace($s[$i], '', $s);
$this->arith2($lin, $s2 . $s[$i]);
}
}
}
$str = 'abc';
print_r(arith2($str))
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target
写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
public function arith3($num, $target)
{
$left = 0;
$right = count($num) - 1;
while ($left <= $right) {
$mid = ceil($left + ($right - $left) / 2);
if ($num[$mid] == $target) {
return $mid;
} elseif ($num[$mid] < $target) {
$left = $mid + 1;
} elseif ($num[$mid] > $target) {
$right = $mid - 1;
}
}
return -1;
}
$arr = [2,4,16,16,17,23];
$target = 16;
echo arith3($arr,$target)
给定一个整数数组 nums 和一个整数目标值 target
请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标
public function arith4($arr, $num)
{
for ($i = 0; $i < count($arr) - 1; $i++) {
for ($j = $i + 1; $j < count($arr); $j++) {
if ($arr[$i] + $arr[$j] == $num) {
return [$i, $j];
} else {
continue;
}
}
}
return false;
}
$arr = [2,4,14,16,17,23];
$target = 200;
print_r(arith4($arr,$target))
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai)
在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水
public function arith5($arr)
{
$x = 0;
$y = count($arr) - 1;
$S = 0;
while ($x < $y) {
$tmp = min($arr[$x], $arr[$y]) * ($y - $x);
$S = max($S, $tmp);
if ($arr[$x] < $arr[$y]) {
++$x;
} else {
--$y;
}
}
return $S;
}
$arr = [1,8,6,2,5,4,8,9,6];
echo arith5($arr);
给你一个字符串 str,找到 str 中最长的回文子串;例如: 输入ascbbcfcb , 输出bcfcb
public function arith6($str)
{
$len = strlen($str);
$res = '';
for ($i=0;$i<$len-2;$i++){
for ($j=$i+2;$j<=$len;$j++){
$tmp = substr($str,$i,$j-$i);
if ($tmp==strrev($tmp)){
if (strlen($tmp)>strlen($res)) {
$res = $tmp;
}
}
}
}
return $res;
}
$str = 'abcdefedcfggggggfc';
echo arith6($str);