第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何有效地對(duì)成對(duì)數(shù)組元素求和并避免在無(wú)對(duì)數(shù)組的情況下出現(xiàn)偏移錯(cuò)誤?

如何有效地對(duì)成對(duì)數(shù)組元素求和并避免在無(wú)對(duì)數(shù)組的情況下出現(xiàn)偏移錯(cuò)誤?

PHP
揚(yáng)帆大魚(yú) 2023-08-11 17:16:29
每?jī)蓚€(gè)數(shù)組配對(duì)就是一項(xiàng)任務(wù)——存儲(chǔ)它、打印它并重復(fù)它,直到它變成一個(gè)值。input : 1, 2, 3, 4, 5, 6, 8, 9, 9output: 3 7 11 17 9        10 28 9        38 9        47 我的代碼在這種情況下運(yùn)行良好。不知何故,我設(shè)法在末尾添加 0 作為成對(duì)元素。但我的主要關(guān)注點(diǎn)是如何使邏輯更加清晰以避免脾氣暴躁的偏移錯(cuò)誤?我的代碼:    function sumForTwos($arr) {    if(count($arr) == 1){       exit;    }    else {            $sum = [];            for ($i = 0; $i < count($arr) -1; $i++)             {                   //logic to add last array for odd count to avoid offset error                if(count($arr) % 2 == 1){ $arr[count($arr)] = 0; }                //logic to pair arrays                if($i != 0) {  $i++; }                $sum = $arr[$i] + $arr[$i + 1];                $total[] = $sum;                 echo $sum . " ";             }                 echo "<br>";                $arr = $total;                //Recursion function                sumForTwos($arr);       }} sumForTwos([1, 2, 3, 4, 5, 6, 8, 9, 9]);
查看完整描述

2 回答

?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以采用迭代方法,并將其視為處理每個(gè)級(jí)別的值,每個(gè)下一個(gè)級(jí)別的總值都會(huì)減少 1 個(gè)值。換句話說(shuō),您可以將其視為逐級(jí)進(jìn)行的廣度優(yōu)先搜索。因此,您可以使用一種queue?數(shù)據(jù)結(jié)構(gòu)一次處理每個(gè)級(jí)別。

您可以使用 PHP 的SplQueue類來(lái)實(shí)現(xiàn)這一點(diǎn)。請(qǐng)注意,我們可以利用此類,因?yàn)樗?code>double-ended queue以下 4 個(gè)操作的幫助下充當(dāng) a:

  • enqueue- 將值排入隊(duì)列末尾。

  • dequeue - 將值從隊(duì)列頂部出列。

  • push- 將值推送到雙向鏈表的末尾(這里,隊(duì)列是作為雙向鏈表實(shí)現(xiàn)的)。

  • pop- 從雙向鏈表的末尾彈出一個(gè)節(jié)點(diǎn)。

毫無(wú)疑問(wèn),以上 4 個(gè)操作都可以在 O(1) 時(shí)間內(nèi)完成。

算法:

  • 將所有數(shù)組元素添加到隊(duì)列中。

  • 我們將循環(huán)直到隊(duì)列大小大于 1。

  • 現(xiàn)在,如果隊(duì)列級(jí)別大小為奇數(shù),pop則使用最后一個(gè)并將其保存在緩沖區(qū)中(在變量中)。

  • dequeue通過(guò)一次 ing 2來(lái)添加所有成對(duì)元素,然后enqueue將它們添加到下一個(gè)級(jí)別。

  • 級(jí)別迭代后,如果前一個(gè)級(jí)別大小為奇數(shù),則添加最后一個(gè)元素。

  • 打印這些添加的元素并相應(yīng)地為每個(gè)級(jí)別回顯新行。

片段:

<?php


function sumForTwos($arr){

? ? if(count($arr) == 1){

? ? ? ? echo $arr[0];

? ? ? ? return;

? ? }

? ??

? ? $queue = new SplQueue();

? ??

? ? foreach($arr as $val){

? ? ? ? $queue->enqueue($val); // add elements to queue

? ? }

? ??

? ? while($queue->count() > 1){

? ? ? ? $size = $queue->count();

? ? ? ? $last = false;

? ? ? ? if($size % 2 == 1){

? ? ? ? ? ? $last = $queue->pop(); // pop the last odd element from the queue to make queue size even

? ? ? ? ? ? $size--;

? ? ? ? }

? ? ? ??

? ? ? ? for($i = 0; $i < $size; $i += 2){

? ? ? ? ? ? $first? = $queue->dequeue();

? ? ? ? ? ? $second = $queue->dequeue();

? ? ? ? ? ? echo $first + $second," ";

? ? ? ? ? ? $queue->enqueue($first + $second);

? ? ? ? }

? ??

? ? ? ? if($last !== false){// again add the last odd one out element if it exists

? ? ? ? ? ? echo $last; // echo it too

? ? ? ? ? ? $queue->push($last);?

? ? ? ? }

? ? ? ??

? ? ? ? echo PHP_EOL;// new line

? ? }

? ??

}


sumForTwos([1, 2, 3, 4, 5, 6, 8, 9, 9]);

查看完整回答
反對(duì) 回復(fù) 2023-08-11
?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

這是你想要的嗎?


function pairBySums($inputArray)

{

    if (sizeof($inputArray) % 2 == 1) {

        $lastEntry = array_pop($inputArray); //$inputArray now has even number of elements

    }


    $answer = [];

    for ($ii = 0; $ii < sizeof($inputArray) / 2; $ii++) {

        $firstIndexOfPair = $ii * 2; // 0 maps to  0, 1 maps to 2, 3 maps to 4 etc 

        $secondIndexOfPair = $firstIndexOfPair + 1; // 0 maps to 1, 1 maps to 3, 2 maps to 5 etc

        $answer[$ii] = $inputArray[$firstIndexOfPair] + $inputArray[$secondIndexOfPair];

    }


    if (isset($lastEntry)) {

        array_push($answer, $lastEntry);

    }


    echo implode(' ', $answer) . "<br>";


    if (sizeof($answer) > 1) {

        pairBySums($answer);

    }

}

該算法確保它在偶數(shù)數(shù)組上運(yùn)行,然后將奇數(shù)條目附加回?cái)?shù)組(如果有)。


$input = [1, 2, 3, 4, 5, 6, 8, 9, 9];

pairBySums($input);

產(chǎn)生:


3 7 11 17 9

10 28 9

38 9

47


對(duì)于偶數(shù)個(gè)項(xiàng)目,


$input = [1, 2, 3, 4, 5, 6, 8, 9];

pairBySums($input);

產(chǎn)生:


3 7 11 17

10 28

38


查看完整回答
反對(duì) 回復(fù) 2023-08-11
  • 2 回答
  • 0 關(guān)注
  • 176 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)