キューは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];
}
}