Nevajadzīga masīva garuma aprēķināšana cilpā PHP

Pieņemsim, ka dots kāds skaitļu masīvs:

php<?php
  $arr = [1, 2, 3, 4, 5];
?>

Padarīsim tā, lai katrs masīva elements tiktu pacelts kvadrātā. Tas ir, mums vajadzētu palikt tam pašam masīvam $arr, bet ar skaitļu kvadrātiem.

Šajā gadījumā cikls foreach neder, bet vajadzīgs parasts cikls for pa masīvu, šeit šādi:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  for ($i = 0; $i < count($arr); $i++) {
    $arr[$i] = $arr[$i] * $arr[$i]; // mainām katru masīva elementu
  }
  
  var_dump($arr);
?>

Kas nav kārtībā ar šo kodu? Problēma ir tā, ka count($arr) bezjēgīgi tiks aprēķināts katrā cikla iterācijā! Bet kāpēc, jo masīva garums ciklā nemainās, vai ne?

Lai optimizētu, izņemsim masīva garuma aprēķinu atsevišķā mainīgajā:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $len = count($arr); // optimizējam
  
  for ($i = 1; $i < $len; $i++) {
    $arr[$i] = $arr[$i] * $arr[$i];
  }
  
  var_dump($arr);
?>
Задание 1

Optimizējiet zemāk redzamo kodu:

php<?php
  $arr = [1, 2, 2, 4, 5];
  
  for ($i = 1; $i < count($arr); $i++) {
    if ($arr[$i - 1] === $arr[$i]) {
      echo $arr[$i] . '<br>';
    }
  }
?>