. 디자인 원형 데크

Barbara Streisand
풀어 주다: 2024-09-29 06:13:02
원래의
796명이 탐색했습니다.

. Design Circular Deque

641. Design Pekeliling Deque

Kesukaran: Sederhana

Topik: Tatasusunan, Senarai Terpaut, Reka Bentuk, Baris Beratur

Reka bentuk pelaksanaan anda bagi baris gilir dua hujung bulat (deque).

Melaksanakan kelas MyCircularDeque:

  • MyCircularDeque(int k) Memulakan deque dengan saiz maksimum k.
  • boolean insertFront() Menambah item di hadapan Deque. Mengembalikan benar jika operasi berjaya, atau palsu sebaliknya.
  • boolean insertLast() Menambah item di belakang Deque. Mengembalikan benar jika operasi berjaya, atau palsu sebaliknya.
  • boolean deleteFront() Memadam item dari hadapan Deque. Mengembalikan benar jika operasi berjaya, atau palsu sebaliknya.
  • boolean deleteLast() Memadam item dari belakang Deque. Mengembalikan benar jika operasi berjaya, atau palsu sebaliknya.
  • int getFront() Mengembalikan item hadapan daripada Deque. Mengembalikan -1 jika deque kosong.
  • int getRear() Mengembalikan item terakhir daripada Deque. Mengembalikan -1 jika deque kosong.
  • boolean isEmpty() Mengembalikan benar jika deque kosong, atau false sebaliknya.
  • boolean isFull() Mengembalikan benar jika deque penuh, atau false sebaliknya.

Contoh 1:

  • Input:
  ["MyCircularDeque", "insertLast", "insertLast", "insertFront", "insertFront", "getRear", "isFull", "deleteLast", "insertFront", "getFront"]
  [[3], [1], [2], [3], [4], [], [], [], [4], []]

로그인 후 복사
  • Output:
  [null, true, true, true, false, 2, true, true, true, 4]

로그인 후 복사
  • Penjelasan:
  MyCircularDeque myCircularDeque = new MyCircularDeque(3);
  myCircularDeque.insertLast(1);  // return True
  myCircularDeque.insertLast(2);  // return True
  myCircularDeque.insertFront(3); // return True
  myCircularDeque.insertFront(4); // return False, the queue is full.
  myCircularDeque.getRear();      // return 2
  myCircularDeque.isFull();       // return True
  myCircularDeque.deleteLast();   // return True
  myCircularDeque.insertFront(4); // return True
  myCircularDeque.getFront();     // return 4

로그인 후 복사

Kekangan:

  • 1 <= k <= 1000
  • 0 <= nilai <= 1000
  • Paling banyak 2000 panggilan akan dibuat untuk memasukkanFront, insertLast, deleteFront, deleteLast, getFront, getRear, isEmpty, isFull.

Penyelesaian:

Kita boleh menggunakan tatasusunan untuk mewakili struktur deque. Kami akan mengekalkan penunjuk kepala dan ekor yang akan membantu kami menjejaki bahagian hadapan dan belakang deque, melilit apabila perlu untuk mencapai gelagat bulat.

Mari laksanakan penyelesaian ini dalam PHP: 641. Deque Pekeliling Reka Bentuk

Berikut ialah penyelesaian langkah demi langkah untuk kelas MyCircularDeque:

<?php
class MyCircularDeque {
    /**
     * @var array
     */
    private $deque;
    /**
     * @var int
     */
    private $maxSize;
    /**
     * @var int
     */
    private $front;
    /**
     * @var int
     */
    private $rear;
    /**
     * @var int
     */
    private $size;

    /**
     * Initialize your data structure here. Set the size of the deque to be k.
     *
     * @param Integer $k
     */
    function __construct($k) {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    /**
     * Adds an item at the front of Deque. Return true if the operation is successful.
     *
     * @param Integer $value
     * @return Boolean
     */
    function insertFront($value) {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    /**
     * Adds an item at the rear of Deque. Return true if the operation is successful.
     *
     * @param Integer $value
     * @return Boolean
     */
    function insertLast($value) {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    /**
     * Deletes an item from the front of Deque. Return true if the operation is successful.
     *
     * @return Boolean
     */
    function deleteFront() {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    /**
     * Deletes an item from the rear of Deque. Return true if the operation is successful.
     *
     * @return Boolean
     */
    function deleteLast() {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    /**
     * Get the front item from the deque. If the deque is empty, return -1.
     *
     * @return Integer
     */
    function getFront() {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    /**
     * Get the last item from the deque. If the deque is empty, return -1.
     *
     * @return Integer
     */
    function getRear() {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    /**
     * Checks whether the deque is empty or not.
     *
     * @return Boolean
     */
    function isEmpty() {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    /**
     * Checks whether the deque is full or not.
     * 
     * @return Boolean
     */
    function isFull() {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }
}

/**
 * Your MyCircularDeque object will be instantiated and called as such:
 * $obj = MyCircularDeque($k);
 * $ret_1 = $obj->insertFront($value);
 * $ret_2 = $obj->insertLast($value);
 * $ret_3 = $obj->deleteFront();
 * $ret_4 = $obj->deleteLast();
 * $ret_5 = $obj->getFront();
 * $ret_6 = $obj->getRear();
 * $ret_7 = $obj->isEmpty();
 * $ret_8 = $obj->isFull();
 */

?>




<h3>
  
  
  Penjelasan:
</h3>

<ol>
<li>
<p><strong>Permulaan</strong>:</p>

<ul>
<li>Kami memulakan deque menggunakan tatasusunan saiz k dan menetapkan semua nilai kepada -1 pada mulanya.</li>
<li>Penunjuk hadapan dan belakang dimulakan kepada 0.</li>
<li>
saiz menjejaki bilangan elemen semasa dalam deque.</li>
</ul>
</li>
<li>
<p><strong>insertFront($value)</strong>:</p>

<ul>
<li>Periksa sama ada deque penuh menggunakan isFull().</li>
<li>Jika tidak, kurangkan penuding hadapan (dengan lilitan bulat menggunakan modulo).</li>
<li>Letakkan nilai di hadapan baharu dan naikkan saiz.</li>
</ul>
</li>
<li>
<p><strong>insertLast($value)</strong>:</p>

<ul>
<li>Periksa sama ada deque penuh.</li>
<li>Jika tidak, letakkan nilai di bahagian belakang dan gerakkan penuding belakang ke hadapan (sekali lagi menggunakan modulo untuk membalut sekeliling).</li>
<li>Naikkan saiz.</li>
</ul>
</li>
<li>
<p><strong>deleteFront()</strong>:</p>

<ul>
<li>Semak sama ada deque kosong menggunakan isEmpty().</li>
<li>Jika tidak, naikkan penunjuk hadapan (lilitan bulat) dan kurangkan saiznya.</li>
</ul>
</li>
<li>
<p><strong>deleteLast()</strong>:</p>

<ul>
<li>Periksa sama ada deque kosong.</li>
<li>Jika tidak, kurangkan penunjuk belakang dan kecilkan saiznya.</li>
</ul>
</li>
<li>
<p><strong>getFront()</strong>:</p>

<ul>
<li>Jika deque kosong, kembalikan -1.</li>
<li>Jika tidak, kembalikan elemen pada penuding hadapan.</li>
</ul>
</li>
<li>
<p><strong>getRear()</strong>:</p>

<ul>
<li>Jika deque kosong, kembalikan -1.</li>
<li>Jika tidak, kembalikan elemen sebelum penuding belakang semasa (memandangkan belakang menghala ke kedudukan tersedia seterusnya).</li>
</ul>
</li>
<li>
<p><strong>isKosong()</strong>:</p>

<ul>
<li>Kembalikan benar jika deque kosong (saiz ialah 0).</li>
</ul>
</li>
<li>
<p><strong>adalahPenuh()</strong>:</p>

<ul>
<li>Kembalikan benar jika deque penuh (saiz sama dengan maxSize).</li>
</ul>
</li>
</ol>

<h3>
  
  
  Contoh Panduan
</h3>



<pre class="brush:php;toolbar:false">$myCircularDeque = new MyCircularDeque(3);  // Initialize deque with size 3

$myCircularDeque->insertLast(1);  // return true
$myCircularDeque->insertLast(2);  // return true
$myCircularDeque->insertFront(3); // return true
$myCircularDeque->insertFront(4); // return false, deque is full
echo $myCircularDeque->getRear(); // return 2
echo $myCircularDeque->isFull();  // return true
$myCircularDeque->deleteLast();   // return true
$myCircularDeque->insertFront(4); // return true
echo $myCircularDeque->getFront(); // return 4
로그인 후 복사

Kerumitan Masa:

  • Setiap operasi (insertFront, insertLast, deleteFront, deleteLast, getFront, getRear, isEmpty, isFull) berjalan dalam masa O(1) kerana semuanya melibatkan operasi tatasusunan masa tetap dan manipulasi penunjuk.

Kerumitan Ruang:

  • Kerumitan ruang ialah O(k), dengan k ialah saiz deque. Kami memperuntukkan ruang untuk elemen k dalam tatasusunan deque.

Pautan Kenalan

Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!

Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:

  • 링크드인
  • 깃허브

위 내용은 . 디자인 원형 데크의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!