堆排序无论排序序列有序还是无序,时间复杂度都为O(nlogn),但改良的冒泡排序可以将时间复杂度降到O(n)。其次,归并排序无论有序还是无序其时间复杂度也是O(nlogn),归并排序在归并的时候,如果右路最小值比左路最大值还大,那么只需要比较n次,但如果右路每个元素分别比左路对应位置的元素大,那么需要比较2*n-1次,该序列明显满足第二个条件,所以其时间复杂度为O(2n),综上所述,选择改良的冒泡排序。快排性能最优。
题目字眼 “ 顺序存储 ” ,说明内存单元中分配的存储空间是连续的,所 以该线性表为数组形式存储,所以数组访问时,通过下标可随机访问,时间复杂度为O(1),而增加插入时,需要涉及大量元素的移动,所以时间复杂度为O(N)。
对于栈用栈顶指针表示栈顶,而栈的插入和删除操作均在栈顶进行。对于队列用队头和队尾指针分别表示允许插入和删除的一端。因此对于顺序存储和链式存储的栈和队列,进行插入和删除运算的时间复杂度均为O(1)。
哈希函数的构造方法:①数字分析法 ②平方取中法 ③除留取余法 ④分段叠加法
处理冲突的方法:①开放地址法(包括线性探测法、二次探测法、伪随机探测法)
②链地址法 ③多重散列法
根据二叉树的基本性质,对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。
给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。
注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。
数据范围:字符串长度:1≤s≤150 1\le s\le 150\ 1≤s≤150
进阶:时间复杂度:O(n3) O(n^3)\ O(n3) ,空间复杂度:O(n) O(n)\ O(n)
输入描述:
输入两个只包含小写字母的字符串
输出描述:
输出一个整数,代表最大公共子串的长度示例1
输入
asdfas werasdfaswer输出
6
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str1 = scanner.nextLine();
String str2 = scanner.nextLine();
System.out.println(Search(str1, str2));
}
private static int Search(String str1, String str2) {
if (str1.length() > str2.length()) {
String temp = str1;
str1 = str2;
str2 = temp;
}
//str1是短的字符串 str2是长的字符串
int j = str1.length();
//记录结果 最长的子串长度
int length = 0;
//记录子串和结果子串比较
int newLength = 0;
for (int i=0; i < str1.length(); i++) {
while (j > i) {
if (str2.contains(str1.substring(i, j))) {
newLength = str1.substring(i, j).length();
length = length >= newLength ? length : newLength;
}
j--;
}
j=str1.length();
}
return length;
}
}