php - 我构建的 PHP 代码并不能适用于所有场景,它有什么问题?
问题描述
我正在尝试解决以下问题:
给定一个整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。
注意:如果 a0 < a1 < ... < an,则序列 a0, a1, ..., an 被认为是严格递增的。仅包含一个元素的序列也被认为是严格递增的。
例子
对于 sequence = [1, 3, 2, 1],输出应该是几乎IncreasingSequence(sequence) = false。
这个数组中没有一个元素可以被删除以获得严格递增的序列。
对于 sequence = [1, 3, 2],输出应该是几乎IncreasingSequence(sequence) = true。
您可以从数组中删除 3 以获得严格递增的序列 [1, 2]。或者,您可以删除 2 以获得严格递增的序列 [1, 3]。
下面是我的代码:
function almostIncreasingSequence($sequence) {
$count = count($sequence);
$oldSeq = $sequence;
sort($sequence);
$key = 0;
foreach ($oldSeq as $s) {
$seq = $oldSeq;
unset($seq[$key]);
$changed_sec = $seq;
sort($seq);
if ($seq==$changed_sec) {
$unique = array_unique($seq);
if ($seq!=$unique) {
$key++;
if ($key==$count) {
return false;
}
continue;
} else {
return true;
break;
}
} else {
$key++;
if ($key==$count) {
return false;
}
continue;
}
}
}
请注意,总的来说,我在编程方面非常初学者,而且我知道肯定有比使用我的代码更短、更简单的方法来让它正确。我会很感激任何关于实现相同目标的更简单和更简单的方法的注释,但是我的主要关注点是我创建的当前代码有什么问题。
解决方案
我相信您的代码中的问题是数组相等。
为了在 PHP 中将 2 个数组视为相等,两个数组应具有相同的键和值。
但是,在您的代码中,您使用的是unset
,它不会重置数组的键。例如:
php > $a = [1,2,3];
php > print_r($a);
Array
(
[0] => 1
[1] => 2
[2] => 3
)
php > unset($a[0]);
php > print_r($a);
Array
(
[1] => 2
[2] => 3
)
因此,如果您有一个变量$b = [ 2, 3 ]
,那么$a == $b
将是false
.
解决此问题的最简单方法是使用array_values
,它会重置数组的索引。
所以,回到$a
之前的数组:
php > print_r($a);
Array
(
[1] => 2
[2] => 3
)
php > print_r(array_values($a));
Array
(
[0] => 2
[1] => 3
)
所以现在,如果你有$b = [ 2, 3 ]
,那array_values($a) == $b
就是true
。
推荐阅读
- python - python中的字典字典
- rest - HTTP标头的“资源”和“方法”有什么区别?
- php - 正则表达式与括号不匹配
- regex - 要丢弃的正则表达式“
- python - 修复 UnboundLocalError:在 python 中赋值之前引用的局部变量“名称”
- clang - Clang AST 节点何时会有多个父节点?
- azure - 在 Active Directory 中为新用户发送电子邮件
- java - 如何在 Spring Boot 中创建无限返回的请求
- java - 使用 Java Jsoup 抓取网站时出现问题,网站无法“滚动”
- javascript - 'for' 循环只打印我的数组的第一个元素