安全オファータイトルを証明するために5:九日の概要を学ぶために、高強度のトレーニング

本当に私は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();
        }
    }
}

おすすめ

転載: www.cnblogs.com/godoforange/p/11575258.html