牛客網編程OJ輸入輸出的加速版(緩衝)

升級版:Buffer和Stream

1.輸入:第一行的第一個數字表示第二行數組的長度
7 6
1 2 3 4 5 6 7

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String line = input.readLine();// 讀取第一行數據
String[] str = line.trim().split(" ");
int n = Integer.parseInt(str[0]);
int v = Integer.parseInt(str[1]);
line = input.readLine(); // 讀取第二行數據
s = line.trim().split(" ");
// 創建一個int型的數組用來儲存第二行的個數字
int[] nums = new int[n];
for (int i = 0; i < n; i ++) {
   nums[i] = Integer.parseInt(s[i]);
}   
// 測試輸入是否正確
for (int num: nums) { System.out.print(num + " ");  }

2.二叉樹的前中後序遍歷

第一行輸入兩個整數 n 和 root,n表示二叉樹的總節點數,root表示樹的根節點。
接下來 n 行每行三個整數 fa,lch,rch,fa的左兒子爲lch,右兒子爲rch。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {         
//第一步:定義樹結點
    private static class TreeNode{
        TreeNode left;    TreeNode right;  int val;
        public TreeNode(int val) {
           this.val = val;   left = null;   right = null;
        }
    }
    //第二步:創建一個樹的結點
    private static TreeNode createTreeCore(BufferedReader in) throws Exception{
        int[] nodes = getIntArray(in.readLine()); //把一行轉爲整數
        TreeNode node = new TreeNode(nodes[0]);//數組中第一個數是根節點
        //通過遞歸確定了層數
        if (nodes[1] != 0) node.left = createTreeCore(in);//左孩子
        if (nodes[2] != 0) node.right = createTreeCore(in); //右孩子
        return node;
    }
     //把接收到的字符串轉換成整數
    private static int[] getIntArray(String str) {
        String[] temp = str.split(" ");
        int[] result = new int[temp.length];
        for (int i = 0; i < temp.length; i++) {
            result[i] = Integer.parseInt(temp[i]);}
        return result;
    }
    public static void main(String[] args) throws Exception{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        //將第一次換行符前的所有輸入以空格分開並保存成字符串的形式
        String[] strings = bf.readLine().split(" ");
        StringBuilder sb = new StringBuilder();//作爲結果的輸出流
        TreeNode treeNode = createTreeCore(bf); //創建樹
        preOrder(treeNode,sb); //前序遍歷
        //因爲在前序遍歷時會多添加一個空格,因此這裏最後一個空格不能讀取
        System.out.println(sb.substring(0,sb.length()-1));
        sb.delete(0,sb.length());//清空
        innerOrder(treeNode,sb);//中序遍歷
        System.out.println(sb.substring(0,sb.length()-1));
        sb.delete(0,sb.length());
        reviewOrder(treeNode,sb);
        System.out.println(sb.substring(0,sb.length()-1));
    }
    //前序遍歷
    private static StringBuilder  preOrder(TreeNode treeNode,StringBuilder sb){
        if (treeNode==null) return null;
        sb.append(treeNode.val+" ");
        preOrder(treeNode.left,sb);
        preOrder(treeNode.right,sb);
        return sb;
    }
    //中序遍歷
    private static StringBuilder innerOrder(TreeNode treeNode,StringBuilder sb){
        if (treeNode==null) return null;
        innerOrder(treeNode.left,sb);
        sb.append(treeNode.val).append(" ");//注意空格
        innerOrder(treeNode.right,sb);
        return sb;
    }
    private static StringBuilder reviewOrder(TreeNode treeNode,StringBuilder sb){
        if (treeNode==null) return null;
        reviewOrder(treeNode.left,sb);
        reviewOrder(treeNode.right,sb);
        sb.append(treeNode.val);
        sb.append(" ");
        return sb;
    }
}

3.安置路燈題
輸入:輸入的第一行包含一個正整數t(1 <= t <= 1000), 表示測試用例數
接下來每兩行一個測試數據, 第一行一個正整數n(1 <= n <= 1000),表示道路的長度。
第二行一個字符串s表示道路的構造,只包含’.‘和’X’。
輸出:對於每個測試用例, 輸出一個正整數表示最少需要多少盞路燈。

public static void main(String[] args) throws IOException{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String sa = bf.readLine();
        int ca = Integer.valueOf(sa);// 轉化包裝類
        for(int i=0; i<ca; i++){
            int len = Integer.valueOf(bf.readLine());
            String s = bf.readLine();
            System.out.println(String.valueOf(lampSum(len,s)));
        }
    }

最後附比較有特點的一道2019網易遊戲.會話列表題
輸入的第一行爲一個正整數T(T<=10),表示測試數據組數。
接下來有T組數據。每組數據的第一行爲一個正整數N(1<=N<=200),表示接收到信息的次數。第二行爲N個正整數,按時間從先到後的順序表示接收到信息的會話id。會話id不大於1000000000。
輸出描述:對於每一組數據,輸出一行,按會話列表從上到下的順序,輸出會話id。
相鄰的會話id以一個空格分隔,行末沒有空格。


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
      BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
      int n = Integer.parseInt(bf.readLine());//String對象轉換爲Integer對象
      for (int i = 0; i < n; i++) {
          int m = Integer.parseInt(bf.readLine());
          System.out.println(getDialogue(bf.readLine(),m));
      }
  }
    //用一個HashSet保存ID,做一個判斷作用,從後往前遍歷,如果set不包含該id,就添加進去。
  private static String getDialogue(String s, int m) {
      StringBuilder sb = new StringBuilder();
      HashSet<String> set = new HashSet<>();
      String[] ids = s.split(" ");
      for (int i = m - 1; i >= 0; i--) {
          if (!set.contains(ids[i])) {
              set.add(ids[i]);
              sb.append(ids[i]).append(" ");
          }   
      }
      return sb.substring(0,sb.length()-1).toString();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章