国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
理解棧
問(wèn)題陳述
使用兩個(gè)附加變量
輸出
使用輔助棧
使用兩個(gè)棧
使用修改後的棧結(jié)構(gòu)
結(jié)論
首頁(yè) Java java教程 Java程序在堆棧中找到最大和最小元素

Java程序在堆棧中找到最大和最小元素

Feb 07, 2025 am 11:24 AM
java

Java program to find the maximum and minimum elements in a stack

棧是遵循後進(jìn)先出原則(也稱為L(zhǎng)IFO)的基本數(shù)據(jù)結(jié)構(gòu)。棧有很多用例,例如組織函數(shù)調(diào)用和撤消操作。通常,人們可能會(huì)遇到查找棧中最大和最小元素的問(wèn)題,本文將演示使用Java完成此任務(wù)的多種方法。

理解棧

棧是一種線性數(shù)據(jù)結(jié)構(gòu),只允許在一端進(jìn)行操作,稱為頂部。主要操作包括:

  • 壓棧 (Push):將元素添加到棧頂。
  • 彈出 (Pop):移除並返回棧頂元素。
  • 查看 (Peek):查看棧頂元素而不將其移除。
  • 是否為空 (IsEmpty):檢查棧是否為空。

問(wèn)題陳述

目標(biāo)是確定棧中的最大和最小元素。鑑於棧的LIFO特性,無(wú)法直接訪問(wèn)除頂部以外的元素。這需要遍歷棧,同時(shí)跟蹤最大值和最小值。

使用兩個(gè)附加變量

在這裡,我們使用兩個(gè)變量 minmax 分別跟蹤最小值和最大值。遍歷棧,並在處理每個(gè)元素時(shí)更新這些變量。這是最簡(jiǎn)單的方法,也是最耗時(shí)和最耗空間的方法。

import java.util.Stack;

public class MaxMinInStack {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(10);
        stack.push(20);
        stack.push(30);
        stack.push(5);
        stack.push(15);

        int[] result = findMaxMin(stack);
        System.out.println("最大元素: " + result[0]);
        System.out.println("最小元素: " + result[1]);
    }

    public static int[] findMaxMin(Stack<Integer> stack) {
        if (stack.isEmpty()) {
            throw new IllegalArgumentException("棧為空");
        }

        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;

        for (Integer element : stack) {
            if (element > max) {
                max = element;
            }
            if (element < min) {
                min = element;
            }
        }
        return new int[]{max, min};
    }
}

輸出

最大元素: 30 最小元素: 5

使用輔助棧

在這裡,我們通過(guò)使用彈出操作並根據(jù)需要更新最小值和最大值來(lái)遍歷棧。輔助棧臨時(shí)保存元素,然後將這些元素恢復(fù)到原始棧中。

import java.util.Stack;

public class MaxMinInStack {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(10);
        stack.push(20);
        stack.push(30);
        stack.push(5);
        stack.push(15);

        int[] result = findMaxMinWithAuxiliaryStack(stack);
        System.out.println("最大元素: " + result[0]);
        System.out.println("最小元素: " + result[1]);
    }

    public static int[] findMaxMinWithAuxiliaryStack(Stack<Integer> stack) {
        if (stack.isEmpty()) {
            throw new IllegalArgumentException("棧為空");
        }

        Stack<Integer> tempStack = new Stack<>();
        int max = stack.peek();
        int min = stack.peek();

        while (!stack.isEmpty()) {
            int current = stack.pop();
            if (current > max) {
                max = current;
            }
            if (current < min) {
                min = current;
            }
            tempStack.push(current);
        }

        while (!tempStack.isEmpty()) {
            stack.push(tempStack.pop());
        }

        return new int[]{max, min};
    }
}

輸出

最大元素: 30 最小元素: 5

使用兩個(gè)棧

這種方法使用兩個(gè)額外的棧,一個(gè)用於記住最大元素(maxStack),另一個(gè)用於記住最小元素(minStack)。每次一個(gè)新元素進(jìn)入主棧時(shí),如果它使最大值或最小值變大,我們也將其放入 maxStackminStack 中。

import java.util.Stack;

public class MaxMinInStack {
    // ... (main method remains the same) ...

    public static int[] findMaxMinWithTwoStacks(Stack<Integer> stack) {
        Stack<Integer> maxStack = new Stack<>();
        Stack<Integer> minStack = new Stack<>();

        while (!stack.isEmpty()) {
            int current = stack.pop();
            if (maxStack.isEmpty() || current >= maxStack.peek()) {
                maxStack.push(current);
            }
            if (minStack.isEmpty() || current <= minStack.peek()) {
                minStack.push(current);
            }
        }
        return new int[]{maxStack.peek(), minStack.peek()};
    }
}

輸出

最大元素: 30 最小元素: 5

使用修改後的棧結(jié)構(gòu)

棧結(jié)構(gòu)被修改為在其自身內(nèi)包含最大值和最小值以及常規(guī)棧元素。每個(gè)元素都保存為一個(gè)對(duì),包含值、當(dāng)前最大值和當(dāng)前最小值。

import java.util.Stack;

public class MaxMinInStack {
    static class StackNode {
        int value;
        int currentMax;
        int currentMin;

        StackNode(int value, int currentMax, int currentMin) {
            this.value = value;
            this.currentMax = currentMax;
            this.currentMin = currentMin;
        }
    }

    public static void main(String[] args) {
        Stack<StackNode> stack = new Stack<>();
        push(stack, 10);
        push(stack, 20);
        push(stack, 30);
        push(stack, 5);
        push(stack, 15);

        int[] result = findMaxMinWithModifiedStack(stack);
        System.out.println("最大元素: " + result[0]);
        System.out.println("最小元素: " + result[1]);
    }

    public static void push(Stack<StackNode> stack, int value) {
        int max = stack.isEmpty() ? value : Math.max(value, stack.peek().currentMax);
        int min = stack.isEmpty() ? value : Math.min(value, stack.peek().currentMin);
        stack.push(new StackNode(value, max, min));
    }

    public static int[] findMaxMinWithModifiedStack(Stack<StackNode> stack) {
        if (stack.isEmpty()) {
            throw new IllegalArgumentException("棧為空");
        }

        StackNode topNode = stack.peek();
        return new int[]{topNode.currentMax, topNode.currentMin};
    }
}

輸出

最大元素: 30 最小元素: 5

結(jié)論

查找棧中最大和最小元素可以通過(guò)不同的方式來(lái)解決,每種方式都有其優(yōu)點(diǎn)和缺點(diǎn)。所示方法包括使用額外變量、輔助棧、為最大值和最小值管理單獨(dú)的?;蚋臈1旧淼慕Y(jié)構(gòu)。

每種技術(shù)都提供了一種特定方法來(lái)處理訪問(wèn)或保存棧項(xiàng)的問(wèn)題,這使得它根據(jù)內(nèi)存限制、性能需求和數(shù)據(jù)完整性需求而適合某些情況。了解和應(yīng)用這些方法可以幫助開(kāi)發(fā)人員有效地處理Java中的棧,使他們的應(yīng)用程序最適合某些情況。

以上是Java程序在堆棧中找到最大和最小元素的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

編寫(xiě)有效的PHP評(píng)論 編寫(xiě)有效的PHP評(píng)論 Jul 18, 2025 am 04:44 AM

註釋不能馬虎是因?yàn)樗忉尨a存在的原因而非功能,例如兼容老接口或第三方限制,否則看代碼的人只能靠猜。必須加註釋的地方包括複雜的條件判斷、特殊的錯(cuò)誤處理邏輯、臨時(shí)繞過(guò)的限制。寫(xiě)註釋更實(shí)用的方法是根據(jù)場(chǎng)景選擇單行註釋或塊註釋,函數(shù)、類、文件開(kāi)頭用文檔塊註釋說(shuō)明參數(shù)與返回值,並保持註釋更新,對(duì)複雜邏輯可在前面加一行概括整體意圖,同時(shí)不要用註釋封存代碼而應(yīng)使用版本控制工具。

撰寫(xiě)PHP評(píng)論的提示 撰寫(xiě)PHP評(píng)論的提示 Jul 18, 2025 am 04:51 AM

寫(xiě)好PHP註釋的關(guān)鍵在於明確目的與規(guī)範(fàn),註釋?xiě)?yīng)解釋“為什麼”而非“做了什麼”,避免冗餘或過(guò)於簡(jiǎn)單。 1.使用統(tǒng)一格式,如docblock(/*/)用於類、方法說(shuō)明,提升可讀性與工具兼容性;2.強(qiáng)調(diào)邏輯背後的原因,如說(shuō)明為何需手動(dòng)輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說(shuō)明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標(biāo)記待辦事項(xiàng)與問(wèn)題,便於後續(xù)追蹤與協(xié)作。好的註釋能降低溝通成本,提升代碼維護(hù)效率。

通過(guò)評(píng)論提高可讀性 通過(guò)評(píng)論提高可讀性 Jul 18, 2025 am 04:46 AM

寫(xiě)好註釋的關(guān)鍵在於說(shuō)明“為什麼”而非僅“做了什麼”,提升代碼可讀性。 1.註釋?xiě)?yīng)解釋邏輯原因,例如值選擇或處理方式背後的考量;2.對(duì)複雜邏輯使用段落式註釋,概括函數(shù)或算法的整體思路;3.定期維護(hù)註釋確保與代碼一致,避免誤導(dǎo),必要時(shí)刪除過(guò)時(shí)內(nèi)容;4.在審查代碼時(shí)同步檢查註釋,並通過(guò)文檔記錄公共邏輯以減少代碼註釋負(fù)擔(dān)。

有效的PHP評(píng)論 有效的PHP評(píng)論 Jul 18, 2025 am 04:33 AM

寫(xiě)好PHP註釋的關(guān)鍵在於清晰、有用且簡(jiǎn)潔。 1.註釋?xiě)?yīng)說(shuō)明代碼背後的意圖而非僅描述代碼本身,如解釋複雜條件判斷的邏輯目的;2.在魔術(shù)值、舊代碼兼容、API接口等關(guān)鍵場(chǎng)景添加註釋以提升可讀性;3.避免重複代碼內(nèi)容,保持簡(jiǎn)潔具體,並使用標(biāo)準(zhǔn)格式如PHPDoc;4.註釋需與代碼同步更新,確保準(zhǔn)確性。好的註釋?xiě)?yīng)站在他人角度思考,降低理解成本,成為代碼的理解導(dǎo)航儀。

了解PHP變量類型 了解PHP變量類型 Jul 17, 2025 am 04:12 AM

PHP有8種變量類型,常用包括Integer、Float、String、Boolean、Array、Object、NULL和Resource。要查看變量類型,可使用gettype()或is_type()系列函數(shù)。 PHP會(huì)自動(dòng)轉(zhuǎn)換類型,但建議關(guān)鍵邏輯用===嚴(yán)格比較。手動(dòng)轉(zhuǎn)換可用(int)、(string)等語(yǔ)法,但注意可能丟失信息。

PHP開(kāi)發(fā)環(huán)境設(shè)置 PHP開(kāi)發(fā)環(huán)境設(shè)置 Jul 18, 2025 am 04:55 AM

第一步選擇集成環(huán)境包XAMPP或MAMP搭建本地服務(wù)器;第二步根據(jù)項(xiàng)目需求選擇合適的PHP版本並配置多版本切換;第三步選用VSCode或PhpStorm作為編輯器並搭配Xdebug進(jìn)行調(diào)試;此外還需安裝Composer、PHP_CodeSniffer、PHPUnit等工具輔助開(kāi)發(fā)。

探索基本的PHP語(yǔ)法 探索基本的PHP語(yǔ)法 Jul 17, 2025 am 04:11 AM

PHP基礎(chǔ)語(yǔ)法包括:1.使用包裹代碼;2.用echo或print輸出內(nèi)容,其中echo支持多參數(shù);3.變量無(wú)需聲明類型,以$開(kāi)頭,常見(jiàn)類型有字符串、整數(shù)、浮點(diǎn)數(shù)、布爾值、數(shù)組和對(duì)象。掌握這些要點(diǎn)有助於快速入門(mén)PHP開(kāi)發(fā)。

了解PHP變量 了解PHP變量 Jul 17, 2025 am 04:11 AM

PHP變量以$開(kāi)頭,命名需遵循規(guī)則,如不能以數(shù)字開(kāi)頭、區(qū)分大小寫(xiě);變量作用域分為局部、全局和超全局;使用global可訪問(wèn)全局變量,但建議用參數(shù)傳遞;可變變量和引用賦值需謹(jǐn)慎使用。變量是存儲(chǔ)數(shù)據(jù)的基礎(chǔ),正確掌握其規(guī)則和機(jī)制對(duì)開(kāi)發(fā)至關(guān)重要。

See all articles