选择题
- 是线性链表,对于数据的删除和插入,只需要改变指针域的执行就可以
- 完全二叉树的重要应用就是堆
- 堆的应用就是最大堆和最小堆
编程题
import java.util.*; public class Main{ public static void main(String []args){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); while(n!=0){ int sum=0; while(n>=3){ int m=n%3; n=n/3; sum+=n; n=n+m; } if(n==2){ sum++; } System.out.println(sum); n=sc.nextInt(); } } }
暴力枚举
import java.util.*; public class Main{ public static void main(String []args){ Scanner sc=new Scanner(System.in); String str1=sc.nextLine(); String str2=sc.nextLine(); if(str1.length()>str2.length()){ System.out.println(getString(str1, str2)); }else{ System.out.println(getString(str2,str1)); } } public static String getString(String str1 ,String str2){ int length=0; String lString=""; //保证str1的长度大于str2 int n=str2.length(); int m=str1.length(); for (int i = 0; i <n; i++) { for (int j =i+1; j <=n; j++) { if(str1.contains(str2.substring(i,j))&&j-i>length){ length=j-i; lString=str2.substring(i,j); } } } return lString; } }
- 方法方程简单,就是从较短的字符串中找出所有的子字符串进行比较,留下长度最长的那个子字符串
import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); String str1=sc.nextLine(); String str2=sc.nextLine(); if(str1.length()>str2.length()){ String temp=str1; str1=str2; str2=temp; } int n=str1.length(); int m=str2.length(); int dp[][]=new int[n+1][m+1]; String str="";//用来记录长公共子字符串 int max=0; int end=0; //字符串第一个字符的下标为1 //dp[i][j]表示str1[1...i] str2[1...j]的最长公共字串的长度为多少 //dp[0][j]=dp[i][0]=0 base case for (int i = 1; i <=n ; i++) { for (int j = 1; j <=m ; j++) { if (str1.charAt(i-1)!=str2.charAt(j-1)){ dp[i][j]=0; }else { dp[i][j]=dp[i-1][j-1]+1; if (dp[i][j]>max){ max=dp[i][j]; end=i; } } // if (dp[i][j]>max){ // max=dp[i][j]; // end=i; // } } } System.out.println(str1.substring(end-max,end)); } }