常见题目

1 topk

快排

O(n)

每排一次,就知道基准的位置,就可以得出TopK是在基准左边部分还是右边部分,因此不需要全部排序

堆排

O(k+nlog(k))

2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

# 给定一个字符串s和一个字符串p,请问最少去掉s中的多少个字符,才能使得p是s的子串呢?
# 解答要求时间限制:1000ms, 内存限制:100MB

# 输入
# 两行,第一行为字符串s,第二行为字符串p。(s和p只包含小写英文字母,s的长度不超过2000,p的长度不超过10,且保证有解)

# 输出
# 最少去掉的字符个数。

# 样例
# 输入样例 1
# axb
# ab
# 输出
# 1

# 输入样例 2
# axabc
# abc
# 输出
# 0

# 输入样例 3
# axbacxbc
# abc
# 输出
# 2

#dp[i][j] 表示 s[:i]最少需要删几个p[:j]是它的子串 O(mn) O(mn)
###

def minedit(str1,str2):
m=len(str1)
n=len(str2)
# max_num=9999
dp=[[None for i in range(n+1)]for j in range(m+1)]
dp[0][0]=0
for i in range(m):
dp[i][0]=0
for i in range(1,m+1):
for j in range(1,n+1):
if str1[i-1]==str2[j-1]:
dp[i][j]=dp[i-1][j-1]
else:
##
if dp[i-1][j]!=None:
dp[i][j]=dp[i-1][j]+1
result=None
for i in range(n,m+1):
if result==None:
result=dp[i][n]
else:
result=min(result,dp[i][n])
return result


print(minedit("axbacxbc","abc"))

basic algorithm

快排

核心思想:取一个数作为基准,比这个数小的放在左边,大的放在右边,然后左边重复,右边重复。

基准元素,一般来说选取有几种方法

  • 取第一个元素
  • 取最后一个元素
  • 取第中间位置元素

实现方式:一般递归+双指针

伪代码

1
2
3
4
1:首先取序列第一个元素为基准元素pivot=R[low]。i=low,j=high。
2:从后向前扫描,找小于等于pivot的数,如果找到,R[i]与R[j]交换,i++。
3:从前往后扫描,找大于pivot的数,如果找到,R[i]与R[j]交换,j--。
4: 重复2~3,直到i=j,返回该位置mid=i,该位置正好为pivot元素。 完成一趟排序后,以mid为界,将序列分为两部分,左序列都比pivot小,有序列都比pivot大,然后再分别对这两个子序列进行快速排序。

时间复杂度(0nlogn)

参考:

https://zhuanlan.zhihu.com/p/63227573

数据结构汇总

https://blog.csdn.net/m0_37568814/article/details/81288756

https://zhuanlan.zhihu.com/p/138523723

1 分类

数据结构包括:逻辑结构,存储结构,数据运算

数据的逻辑结构主要分为线性结构和非线性结构。

  • 线性结构:数据结构的元素之间存在一对一线性关系,所有结点都最多只有一个直接前趋结点和一个直接后继结点。常见的有数组、队列、链表、栈。
  • 非线性结构:各个结点之间具有多个对应关系,一个结点可能有多个直接前趋结点和多个直接后继结点。常见的有多维数组、广义表、树结构和图结构等。

数据的存储结构,表示数据元素之间的逻辑关系,一种数据结构的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有:

  • 顺序存储:存储顺序是连续的,在内存中用一组地址连续的存储单元依次存储线性表的各个数据元素。
  • 链式存储:在内存中的存储元素不一定是连续的,用任意地址的存储单元存储元素,元素节点存放数据元素以及通过指针指向相邻元素的地址信息。
  • 索引存储:除建立存储结点信息外,还建立附加的索引表来标识节点的地址。索引表由若干索引项组成。
  • 散列存储:又称Hash存储,由节点的关键码值决定节点的存储地址。

2 常用的数据结构

  • 数组(Array)
  • 队列(Queue)
  • 链表(Linked List)
  • 栈(Stack)
  • 树(Tree)
  • 散列表(Hash)
  • 堆(Heap)
  • 图(Graph)

:D 一言句子获取中...