PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : یافتن بزرگترین اعداد در آرایه ای از اعداد



esi20
April 30th, 2020, 14:37
سلام و درود

مدتی هست که دنبال روشی هستم که بتونم بزرگترین اعداد رو در آرایه ای از اعداد جدا کنم.

به طور مثال آرایه ای به شکل زیر دارم:



[10, 15, 17, 19, 14, 10, 25, 15, 11, 33, 28]


به عنوان مثال در آرایه بالا بتونه الگوریتم بهم اعداد 19 و 25 و 33 رو بده.
بخوام دقیق تر توضیح بدم خدمت شما به این شکل که بزرگترین اعداد رو به صورت بازه ای میخوام نه بزرگترین عدد کل آرایه که اینجا میشه 33. بازم بخوام بیشتر بگم عدد بزرگی رو میخوام که بعدش اعداد از اونجا کوچیک شدن.
امیدوارم متوجه شده باشید.
ممنون میشم اگر الگوریتمی برای تشخیص این مورد دارید یا به ذهنتون میرسه راهنمایی کنید.

سپاس

hoka
April 30th, 2020, 17:32
asort($arr);
$result = array_slice($arr, -3, 3);


این برای مثلا 3 تا بزرگترین اعداد

برای باقی مانده ی اعداد هم


arsort($arr);
$result2 = array_slice($arr, 3);


اگر درست متوجه شده باشم منظورتون رو . اگر نه که مثال بزنید

esi20
April 30th, 2020, 21:43
asort($arr);
$result = array_slice($arr, -3, 3);


این برای مثلا 3 تا بزرگترین اعداد

برای باقی مانده ی اعداد هم


arsort($arr);
$result2 = array_slice($arr, 3);


اگر درست متوجه شده باشم منظورتون رو . اگر نه که مثال بزنید

درود بر شما و تشکر بابت پاسختون.

نمونه من به عنوان مثال بود و تعداد این اعداد 2-3 هزارتاست و اصلا تعداد اعدادی که شرایط رو دارن مشخص نیست توی نمونه من 3 تا بود.
در کل فرمولی که میتونم بگم اینه که اعداد به صورت افزایشی میشن بعد به یه قله ای میرسن از اونجا میان پایین اون نقطه قله میشه یکی از بزرگترین اعداد ما همین طوری توی آرایه پیش بری تعداد این اعداد شاید 100 تا هم باشه.

firebox
April 30th, 2020, 23:05
این یک نمونه خیلی ساده هست نوشتم، باید تست اش کنی، شاید تو موارد خاص مشکل داشته باشه.



function biggest_numbers($numbers_list) {
$last_number = NULL;
$big_numbers = [];
foreach ($numbers_list as $number) {
if ($number != NULL && $number < $last_number) {
array_push($big_numbers, $last_number);
$last_number = NULL;
} else {
$last_number = $number;
}
}
return $big_numbers;
}


$list = [-15,-1,0,-1,10, 15, 17, 19, 14, 10, 25, 15, 11, 33, 28];
print_r(biggest_numbers($list));

// output
Array
(
[0] => 0
[1] => 19
[2] => 25
[3] => 33
)

esi20
May 3rd, 2020, 22:26
این یک نمونه خیلی ساده هست نوشتم، باید تست اش کنی، شاید تو موارد خاص مشکل داشته باشه.



function biggest_numbers($numbers_list) {
$last_number = NULL;
$big_numbers = [];
foreach ($numbers_list as $number) {
if ($number != NULL && $number < $last_number) {
array_push($big_numbers, $last_number);
$last_number = NULL;
} else {
$last_number = $number;
}
}
return $big_numbers;
}


$list = [-15,-1,0,-1,10, 15, 17, 19, 14, 10, 25, 15, 11, 33, 28];
print_r(biggest_numbers($list));

// output
Array
(
[0] => 0
[1] => 19
[2] => 25
[3] => 33
)



سپاسگزارم کد خوبی بود.
فقط اون قسمت اول if فک کنم میخواستید last_number رو چک کنید اشتباها number رو چک کردید null نبودنش رو.
ولی عالی بود.