安全プランを証明する:8-11の記録

キューは2つのスタックで実装されています。次の文キューは、その2つの機能appendTailとdeleteHeadは、キュー機能の頭の中でキューの挿入、削除、整数、整数の最後に完了した実装します。(無キュー要素が存在しない場合、deleteHead動作戻り-1)

 

例1:

入力:
[ "CQueue"、 "appendTail"、 "deleteHead"、 "deleteHead"]
[]、[3]、[]、[]]
出力:[NULL、NULL、3、 -1]
実施例2:

输入:
[ "CQueue"、 "deleteHead"、 "appendTail"、 "appendTail"、 "deleteHead"、 "deleteHead"]
[]、[]、[5]、[2]、[]、[]]
输出。 [NULL、-1、NULL、NULL、5,2]
提示:

1 <=値<= 10000が
最もappendTail、deleteHeadは10,000のコールだっただろう

 アイデア:補助スタック、吐出動作の前に、スタック2要素1は、スタック2に空にし、次にスタック2をポップされたときにスタックが空です。

class CQueue {
    Stack<Integer> stack1;
    Stack<Integer> stack2;

    public CQueue() {
        stack1 = new Stack<Integer>();
        stack2 = new Stack<Integer>();
    }
    
    public void appendTail(int value) {
        stack1.push(value);
    }
    
    public int deleteHead() {
        if(stack2.empty()){
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
        }
        if(stack2.empty()){
            return -1;
        }
        return stack2.pop();
    }
}

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */

n個のアイテムのフィボナッチ(フィボナッチ)系列を求め、機能、入力を書くN。次のようにフィボナッチ数列は、証書に定義します:

F(0)= 0、F(1)= 1
F(N)= F(N - 1)+ F(N - 2)、ここで、N> 1の
先頭から搬送フィボナッチ数列0及び1すなわち、後フィボナッチ数は、前の2つの数の合計から導出されます。

1000000008、1に戻る:答えはモジュロ1E9 + 7(十億七)を必要に応じて、初期の結果は次のように計算されます。

 

例1:

入力:n = 2の
出力:1
例2:

入力:N = 5
出力:5
 

ヒント:

0 <= N <= 100

アイデアは:最適化スペースに公式によると、あなたはいくつかの変数を使用することができます。

class Solution {
    public int fib(int n) {
        int a = 0, b = 1, sum;
        for(int i = 0; i < n; i++){
            sum = (a + b) % 1000000007;
            a = b;
            b = sum;
        }
        return a;
    }
}

カエルは、クラス1レベルにジャンプすることができ、あなたはまた、レベル2のレベルでホップすることができます。カエルはどのように多くのジャンプのn級レベルの合計を求めて飛び込みました。

1000000008、1に戻る:答えはモジュロ1E9 + 7(十億七)を必要に応じて、初期の結果は次のように計算されます。

例1:

入力:n = 2の
出力:2
例2:

入力:N = 7
出力:21
注:

0 <= N <= 100

式と同じトピックに関する。

class Solution {
    public int numWays(int n) {
        int a = 1, b = 1, sum;
        for(int i = 0; i < n; i++){
            sum = (a + b) % 1000000007;
            a = b;
            b = sum;
        }
        return a;
    }
}

いくつかの要素の配列の先頭には、配列、我々は回転呼んで配列の最後に移動しました。ソートされた配列を配列の最小要素回転出力の増分回転を入力します。例えば、[3,4,5,1,2]の配列は、[1,2,3,4,5]の回転、アレイの最小値は1です。  

例1:

入力:[3,4,5,1,2]
出力:1
例2:

入力:[2,2,2,0,1]
出力:0

アイデア:右の点より2点と注意ではなく、左のポイント。

どのように魂は同じ動作条件です。

class Solution {
    public int minArray(int[] numbers) {
        int i = 0, j = numbers.length - 1;
        while (i < j) {
            int mid = (i + j) / 2;
            if (numbers[mid] > numbers[j]) i = mid + 1;
            else if (numbers[mid] < numbers[j]) j = mid;
            //这一句是细节灵魂所在
            else j--;
        }
        return numbers[i];
    }
}


 

发布了619 篇原创文章 · 获赞 1万+ · 访问量 154万+

おすすめ

転載: blog.csdn.net/hebtu666/article/details/104751223