gpt4 book ai didi

php - 查找数组中较小元素的计数,解决方案需要为 2n

转载 作者:行者123 更新时间:2023-12-04 07:27:22 29 4
gpt4 key购买 nike

嗨,我遇到了一个问题,我必须找出数组中较小元素的计数,我已经实现了我们所说的蛮力方法,但这不是优化的解决方案,任何人都可以帮我解决下面代码的优化解决方案

<?php
function find_small_count($arr){
$no_count = [];
foreach ($arr as $key => $value){
$no_count[$key] = 0;
foreach ($arr as $key1 => $value){
if ($arr[$key1] < $arr[$key]) {
$no_count[$key]++;
}
}
}
return $no_count;
}
print_r(find_small_count(['8','1','2','2','5']));
?>

Where in the expected Output should be [4,0,1,1,3]

最佳答案

我为你提供了三个解决方案。让我解释
Working code sandbox
解决方案1
使用 array_filter 只返回符合条件的元素,然后对过滤后的数组进行计数以获取计数。

## Solution 1:

function find_small_count($arr)
{
$response = [];
foreach ($arr as $valueToSearch) {
$filtered = array_filter($arr, function ($value) use ($valueToSearch) {
return $value < $valueToSearch;
});
$response[] = ['valueToSearch' => $valueToSearch, 'count' => count($filtered)];

}
return $response;
}
print_r(find_small_count(['8', '1', '2', '2', '5']));
解决方案2 Sort数组按升序排列。这样做时,您的数组的所有数字都小于出现在它之前(在数组中)的当前元素。因此 key因为数组将是所有小于当前值的数字的计数,不包括当前数字(键以 0 开头)。
当一个数字出现两次时异常(exception),例如 2在你的情况下。如果我们使用 keycount在你的情况下 first 2将有 count 1second 2将有 count 2 ,这是不正确的。请注意 first 2确实给你正确的计数。
为了避免这种情况,我们可以使用 array_unique 并删除重复项。这将使您的回答中只剩下一个 2(第一个),并且会给您正确的计数。
你可能会想 5 .为此,我们可以回退到 array_unique 的行为。以保存 key 。因此即使在 array_unique 之后 5将保留其 key , IE。 3 .我们的目标已经完成。唯一的副作用是响应将是 [4,0,1,3]而不是 [4,0,1,1,3] .因此,如果可行,您可以使用此方法。
function find_small_count_two($arr){
$response = [];
sort($arr);
$arrUniqueAndSorted = array_unique($arr);
foreach ($arrUniqueAndSorted as $key => $value){
$response[] = ['valueToSearch' => $value, 'count' => $key];
}
return $response;
}
print_r(find_small_count_two(['8', '1', '2', '2', '5']));
解决方案3
使用 array_search .从文档

Searches the array for a given value and returns the first corresponding key if successful


与解决方案 2 相同的逻辑,但这个避免了 array_unique
function find_small_count_three($arr){
$response = [];
sort($arr);
foreach ($arr as $valueToCount){
$count =array_search($valueToCount, $arr);
$response[] = ['valueToSearch' => $valueToCount, 'count' => $count];
}
return $response;
}

关于php - 查找数组中较小元素的计数,解决方案需要为 2n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68139110/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com