ホームページ >Java >&#&チュートリアル >Javaでスタック要素が連続しているかどうかを確認してください

Javaでスタック要素が連続しているかどうかを確認してください

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-02-07 11:31:10932ブラウズ

Check if stack elements are pairwise consecutive in Java

スタックは、コンピューターサイエンスの基本的なデータ構造であり、通常、最新の(lifo)属性に使用されます。スタックを使用する場合、興味深い問題が発生する可能性があります。これは、スタックの要素がペアで連続しているかどうかを確認することです。この記事では、Javaを使用してこの問題を解決する方法を学び、ソリューションが効率的かつ明確であることを確認します。

問題声明

整数スタックを考えると、タスクは、スタックの要素がペアで連続しているかどうかを判断することです。 2つの要素間の違いが正確に1の場合、それらは連続と見なされます。

入力

<code>4, 5, 2, 3, 10, 11</code>

output

<code>元素是否成对连续?<br>true</code>

ステップスタック要素がペアになって連続しているかどうかを確認する

以下は、スタック要素がペアになって連続しているかどうかを確認する手順です。

  • スタックサイズを確認します:スタック上の要素の数が奇妙な場合、最後の要素はペアリングされないため、ペアワイズ検査では無視する必要があります。
  • ペアベースのチェック:スタックをループし、要素をペアでポップし、連続しているかどうかを確認します。
  • スタックの復元:チェックを実行した後、スタックを元の状態に復元する必要があります。
javaプログラムスタック要素がペアであり、隣接するかどうかを確認する

以下は、スタック要素がペアで隣接しているかどうかをチェックするJavaのプログラムです。

説明
<code class="language-java">import java.util.Stack;

public class PairwiseConsecutiveChecker {
    public static boolean areElementsPairwiseConsecutive(Stack<integer> stack) {
        // 基本情况:如果堆栈为空或只有一个元素,则返回 true
        if (stack.isEmpty() || stack.size() == 1) {
            return true;
        }

        // 使用临时堆栈在检查时保存元素
        Stack<integer> tempStack = new Stack<>();
        boolean isPairwiseConsecutive = true;

        // 成对处理堆栈元素
        while (!stack.isEmpty()) {
            int first = stack.pop();
            tempStack.push(first);

            if (!stack.isEmpty()) {
                int second = stack.pop();
                tempStack.push(second);

                // 检查这对元素是否连续
                if (Math.abs(first - second) != 1) {
                    isPairwiseConsecutive = false;
                }
            }
        }

        // 恢复原始堆栈
        while (!tempStack.isEmpty()) {
            stack.push(tempStack.pop());
        }

        return isPairwiseConsecutive;
    }

    public static void main(String[] args) {
        Stack<integer> stack = new Stack<>();
        stack.push(4);
        stack.push(5);
        stack.push(2);
        stack.push(3);
        stack.push(10);
        stack.push(11);

        boolean result = areElementsPairwiseConsecutive(stack);

        System.out.println("元素是否成对连续? " + result);
    }
}</integer></integer></integer></code>

スタックの復元:

右をチェックするときにスタックを変更したため、チェックが完了した後に元の状態に復元することが非常に重要です。これにより、その後の操作に対してスタックが変更されないようになります。

エッジケース:

この関数は、空のスタックや1つの要素のみのスタックなどのエッジケースを処理します。

時間の複雑さ:

このメソッドの時間の複雑さはo(n)であり、nはスタック内の要素の数です。これは、必要に応じて要素をポップして押すだけで、スタックを一度だけ通過するためです。

スペースの複雑さ:

一時的なスタックが使用されるため、スペースの複雑さもo(n)です。 結論

このソリューションは、スタック内の要素がペアで連続しているかどうかを確認するための効率的な方法を提供します。重要なのは、スタックをペアで処理し、操作後にスタックが元の状態に復元されていることを確認することです。このアプローチは、明確で効果的なソリューションを提供しながら、スタックの整合性を維持します。

以上がJavaでスタック要素が連続しているかどうかを確認してくださいの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。