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、薯隊長寫了一篇筆記草稿,請你幫忙輸出最后內容。
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,每篇筆記都獲得了不少點贊數。
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。那么薯隊長如何制定售賣順序,才能賣給回收員寶物總個數最多。
還未做出來,待續