小紅書19面試題總結(錯題整理)


1、對一棵先序遍歷節點編號為12435678,中序遍歷為42165738的二叉樹,進行左子節點優先的廣度優先遍歷,搜索到編號為6的節點需要幾次查詢-------7

 

 中序遍歷和后序遍歷搞混了所以沒做出來,先序中序后序的區別在於頂點節點的訪問順序,推斷出樹的結構,好做多了;

廣度優先遍歷,是從上到下對每一層依次訪問,在每一層,從左到右訪問節點,所以順序是,1,2,3,4,5,8,6,共7次

2、下面關於數據庫索引的描述正確的有()

 

 

首先簡單說一下聯合索引:聯合索引又叫復合索引,是由表中的幾個列聯合組成的索引。聯合索引生效需滿足最左前綴原則,即如果聯合索引列為a,b,c三列,a,b,c 、a,b 、a生效,b,c、a,c、b、c等不生效(此處的順序不是where條件后面的先后順序,而是where條件中是否存在這些列,如果where中只存在a,c列,則不生效)。

什么時候索引生效:
1.表中含有索引。
2.查詢時全表掃描比使用索引效率低時(大多數情況效率低,當數據量少或其他特殊情況下,全表掃描比使用索引效率高時,mysql不使用索引)。
3.滿足索引生效的規則(例如表中是數值類型,傳參是字符串類型)。

什么時候使用強制索引 force index:當我們確定要使用一個索引進行查詢時,就可以使用強制索引。但使用強制索引后,mysql優化器不會在指定到其他的索引上,不管查詢條件如何變,都會使用該索引進行查詢。

 

3、某小紅薯在小紅書的活動中抽獎中了一定價值的薯券,這些薯券可以用來購買一批商品,求有多少種購買組合。其中一件商品可以買多件。

輸 入:薯券金額、商品分別價格
輸出 :組合數
import java.util.Scanner;
 
public class Main {
 
        public static void main(String[] args) {
            Scanner scanner =new  Scanner(System.in);
            int totalPrice = scanner.nextInt();
            String next = scanner.next();
            int length = next.length();
            String substring = next.substring(1, length-1);
            String[] split = substring.split(",");
            int[] arr =new  int[split.length];
            for (int i = 0; i < split.length; i++) {
                arr[i] =Integer.parseInt(split[i]);
            }
            int[] dp =new int[totalPrice+1];
            dp[0]=1;
            for (int i : arr) {
                for (int j = i; j <= totalPrice; j++) {
                    dp[j]+=dp[j-i];
                }
            }
            System.out.println(dp[totalPrice]);
 
        }
}

  

4、薯隊長寫了一篇筆記草稿,請你幫忙輸出最后內容。

 1.輸入字符包括,"("    ,    ")"    和    "<"和其他字符。 
2.其他字符表示筆記內容。
 3.()之間表示注釋內容,任何字符都無效。    括號保證成對出現。
 4."<"表示退格,    刪去前面一個筆記內容字符。括號不受"<"影響    。 
import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
 
        String in = sc.nextLine();
        StringBuilder sb = new StringBuilder();
        int count = 0;
        for(int i=0; i<in.length(); i++){
            char ch = in.charAt(i);
            if(ch == '('){
                count++;
            }else if(ch == ')'){
                count--;
            }else if(ch == '<'){
                if(sb.length() > 0 && count == 0){
                    sb.deleteCharAt(sb.length()-1);
                }
            }else{
                if(count == 0){
                    sb.append(in.charAt(i));
                }
            }
        }
        System.out.println(sb.toString());
    }
}

  

5、薯隊長寫了n篇筆記,編號從1~n,每篇筆記都獲得了不少點贊數。    

薯隊長想從中選出一些筆記,作一個精選集合。挑選的時候有兩個規則:
 1.不能出現連續編號的筆記。 
2.總點贊總數最多 
如果滿足1,2條件有多種方案,挑選筆記總數最少的那種
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int nums = sc.nextInt();
        int[] dp = new int[nums+1];
        int[] flag = new int[nums+1];
        dp[1] = sc.nextInt();
        flag[1] = 1;
        for(int i = 2; i <= nums; i++){
            int in = sc.nextInt();
            dp[i] = Math.max(in + dp[i-2], dp[i-1]);
            if(dp[i] == dp[i-1]){
                flag[i] = flag[i-1];
            }else{
                flag[i] = flag[i-2]+1;
            }
        }
        System.out.println(dp[nums] + " " + flag[nums]);
    }
}

  

6、在游戲中,擊敗魔物后,薯隊長獲得了N件寶物,接下來得把這些寶物賣給寶物回收員來賺點小錢。這個回收員有個壞毛病,每次賣給他一件寶 物后,之后他就看不上比這件寶物差的寶物了。在這個世界中,衡量寶物的好壞有兩個維度,稀有度X和實用度H,回收員在回收一個寶物A 后,下一個寶物的稀有度和實用度都不能低於寶物A。那么薯隊長如何制定售賣順序,才能賣給回收員寶物總個數最多。 

還未做出來,待續

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM