本当に私はJVMを見たいと思っていません。オファーの安全性を証明するためにいくつかの質問を磨き、ウォーターバーの水今日は、彼の心は混乱します。
1. 2次元配列を探します
(同一の各一次元アレイの長さ)は、上から下に増加する順に、二次元アレイの各列を並べ替えるために、昇順ソートの順に左から右に、各行。完全な機能、例えば、二次元アレイと整数を入力し、配列の整数が含まれているか否かが判断されます。
問題解決のアイデア:右から左へ、上から下刻みに検索を開始するには、右上の角が減少しています。検索するには、アルゴリズムの複雑さは、n + m個のこの考えに基づいています
public class Solution {
public boolean Find(int target, int [][] array) {
int x=0,y=array[0].length-1;
while(x<array.length&&y>-1){
if(array[x][y]>target){
y--;
}else if(array[x][y]<target){
x++;
}else{
return true;
}
}
return false;
}
}
2.スペースを交換してください
、にそれぞれのスペースを置き換えるために、文字列関数を実装してください「20%。」文字列があるとき例えば、私たちは幸せです。文字列は今後%20Are%20Happy後に交換された後。
問題解決のアイデア:あなたは時間のためのスペースを使用するように、複雑さが高すぎる、一つ一つを挿入することはできません。より良い割り当て。
public class Solution {
public String replaceSpace(StringBuffer str) {
StringBuffer sb = new StringBuffer();
for(int i=0;i<str.length();i++) {
if(str.charAt(i)==' ') {
sb.append("%20");
}else {
sb.append(str.charAt(i));
}
}
return sb.toString();
}
}
3.リストの末尾から印字ヘッド
ArrayListの先頭に尾からのリストの順番を返すことによって、リストを入力します。
問題解決のアイデア:この問題は、直接、その後、C ++でのポインタを逆にすることができますが、Javaは、コレクションクラスに渡されます。でもバー場合。馬鹿ソリューション。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> al = new ArrayList<Integer>();
while(listNode!=null) {
al.add(0,listNode.val);
listNode = listNode.next;
}
return al;
}
}
バイナリツリーの4再建
そして、再構築したバイナリツリーの先行順走査でバイナリツリーの先行順走査で結果を入力してください。仮定結果先行順走査順序と重複する数字の入力は無料です。例えば、前順走査シーケンス{1,2,4,7,3,5,6,8}及び{4,7,2,1,5,3,8,6}順序トラバーサル順序、及び再構成された二分木に入る前リターン。
問題解決のアイデア:再帰的な成果。基本的な質問。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre.length==0) return null;
TreeNode trn = new TreeNode(pre[0]);
if(pre.length==1) return trn;
else for(int i=0;i<in.length;i++) {
if(in[i]==pre[0]) {
int [] preleft = new int[i];
int [] preright = new int[in.length-i-1];
int [] inleft = new int[i];
int [] inright = new int[in.length-i-1];
System.arraycopy(pre,1,preleft,0,i);
System.arraycopy(pre,i+1,preright,0,in.length-i-1);
System.arraycopy(in,0, inleft, 0, i);
System.arraycopy(in,i+1, inright, 0, in.length-i-1);
trn.left = reConstructBinaryTree(preleft, inleft);
trn.right = reConstructBinaryTree(preright,inright);
return trn;
}
}
return trn;
}
}
2つのスタックキュー
キューを達成するための2つのスタック、完了キューのプッシュとポップ操作。キューの要素がint型。
問題解決のアイデア:最後のアウトおよびFIFOに基づいては、理解したいと理解しました。
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(!stack2.empty()) {
return stack2.pop();
}
else{
while(!stack1.empty()) {
stack2.push(stack1.pop());
}
return stack2.pop();
}
}
}